毕业论文
您现在的位置: 框架 >> 框架介绍 >> 正文 >> 正文

模块化OSGI容器Karaf走向Spri

来源:框架 时间:2023/1/20
小儿白癜风怎样治疗 http://m.39.net/pf/a_4784144.html

概述

公司在16年之前,采用的技术结构都是模块化。大概在17年的时候,根据公司要求,开发新的产品,同时要使用新的框架技术。当时Springboot已经开始普遍开来,当然选择Springboot不仅仅是其发展迅速,而更重要的看重其出身,没错,程序员在选择技术的时候,也是看出身的。SpringBoot是Spring团队,这个出生于名门的天之骄子。

下面先简单介绍下OSGI与使用的依赖注入(BluePrint)

OSGI简介

OSGi是一个动态的Java模块(Module)系统,它规定了如何定义一个Module以及这些模块之间如何交互。每个OSGi的Java模块被称为一个bundle。每个bundle都有自己的类路径,可以精确规定哪些Java包和类可以被导出,需要导入哪些其它bundle的哪些类和包,并从而指明bundle之间的依赖关系。另外bundle可以被在运行时间安装,更新,卸载并且不影响整个应用。通过这种方式,分层的类加载机制变成了网状的类加载机制。在应用程序启动之前,OSGi就可以检测出来是否所有的依赖关系被满足,并在不满足时精确报出是哪些依赖关系没被满足。

OSGi框架

OSGi框架从概念上可以分为三层:模块层、生命周期层,服务层运行环境

ModuleLayer:模块层主要涉及包及共享的代码;LifecycleLayer:生命周期层主要涉及Bundle的运行时生命周期管理;ServiceLayer:服务层主要涉及模块之间的交互和通信。运行环境

模块层模块层是OSGi框架中最基础的部分。

OSGi的模块化,是通过为Jar包添加metadata来定义哪些类该暴露,哪些类该隐藏,其控制单元叫做Bundle(jar包)。

Bundle

首先,必须先了解一个基本概念——什么是Bundle?

什么是Bundle?

bundle是以jar包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且jar包的物理边界也同时是运行时逻辑模块的封装边界。

生命周期层生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的。生命周期层的主要功能是控制动态安装、开启、关闭、更新和卸载的bundles。

生命周期层让你能够从外部管理应用或者建立能够自我管理的应用(或者两者的结合),并且给了应用本身很大的动态性。

前面已经了解了Bundle的概念和作用。但是要真正使用Bundle,需要使用生命周期层的API,来和OSGi框架的生命周期层进行交互。

在标准的Java编程中,可以通过将jar包放到classpath中来使用它。而bundle则不是这样,Bundle只有在被安装(install)到一个OSGi框架的运行实例中才能用起来。并且OSGi框架支持对这些bundle完整的生命周期管理,并且支持这些管理操作在应用执行完成。

下图为Bundle生命周期的状态转移图:

服务层服务层

转载请注明:http://www.0431gb208.com/sjszlfa/3280.html