Bundle可以被动态地安装、启动、停止和卸载。
Bundle是服务(Service)和组件(Component)的载体。
在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoader,正因为这样,各个Bundle内部的类是隔离的

Bundle之间的交互方式:
1.通过Package的Export(对外暴露自己的一个或多个package)和Import(导入别人的一个或多个package)来进行。
2.通过Service的方式进行。一个Bundle作为Service提供方,对外提供Servcie .使用者可以查找到提供的Service. 并使用这个ServÎce. 而提供/使用Service又存在两种方式:一种是经典的做法,通过BundlcContext ( Bundle 的上下文)来提供和获取.一种是使用Declarative Service来实现.

生命周期层
Bundle的生命周期被OSGi框架所管理,具有如下几个状态:INSTALLED 、RESOLVED 、UNINSTALLED 、STARTING 、ACTIVE、STOPPING

重要接口

生命周期层的API主要是由以下三个核心接口来组成的:BundleActivator,BundleContext 和 Bundle。
BundleActivator:让你能够捕捉bundle的start和stop事件,并对这两个事件作出自定义的反应。
BundleContext:一个bundle在框架中的执行时上下文,这个上下文提供了和框架进行交互的方法。
Bundle:在逻辑上表示了一个bundle,OSGi环境中的一个物理bundle对应了一个bundle对象。该对象中包含了bundle的基本信息和bundle生命周期的控制接口。

Bundle-SymbolicName --> 在osgi容器中的全局唯一标识符
当且仅当两个bundle的bundle-SymbolicName和bundle-version都一样,它们才是完全相同的
Export-Package:com.jar;filter="true" --> Import-Package:com.jar;filter="true"(或不写,可导入成功)
Export-Package:com.jar;filter="true";mandatory:="filter" --> Import-Package:com.jar;filter="true"(可导入成功)
mandatory默认为optional-->可选的

Import-Package:com.jar;resolution:="mandatory" -->必须的(默认),如果没有任何bundle导出com.jar-->报错

Import-Package:com.jar;resolution:="optional" -->可选的,如果没有任何bundle导出com.jar-->不报错

DynamicImport-Package:com.jar -->动态导入com.jar,真正使用到com.jar类时才导入package是否存在

Export-Package:com.jar;uses:="com.http.jar"  -->  com.jar使用了com.http.jar中的API

#导入整个bundle(不提倡)

a、
bundleA:
require-Bundle:bundleB
Export-Package:P

bundleB:
Export-package:p;partial=true;mandatory:partial

如果Bundle没有声明属性partial。它会从bundleA中导入Package p;

b、

bundleA:

require-Bundle:bundleB;visibilit:=reexport -->com.jar是否需要重新导出?默认(private:com.jar不会重新导出)
bundleB:
Export-package:com.jar

#spring-dm
http://docs.spring.io/osgi/docs/1.2.0-rc1/reference/html/
#在设计时要遵循的原则是不要静态化地依赖任何服务
##4大 Java OSGi 框架比较 (Knopflerfish, Apache Felix, Equinox, Spring DM)

最新文章

  1. jQuery缓存数据
  2. LeetCode Intersection of Two Arrays
  3. matrix-tree
  4. html+css+javascript实现列表循环滚动示例代码
  5. ACL权限的学习
  6. MVC中的几个问题汇总
  7. 由于Linux操作平台屡次受到黑客的“青睐”,LINUX公司也越来越注重产品的安全问题。
  8. Java库使用----xstream1.3.1
  9. iOS开发 使用Xcode自带的Leaks
  10. Android中怎样在应用A中启动或安装应用B
  11. css3 flex 布局
  12. SQLServer2PostgreSQL迁移过程中的几个问题
  13. DevOps概述
  14. C#杂记-自动实现的属性(自动属性)
  15. .Net Core知识点
  16. 最新版本elasticsearch本地搭建入门篇
  17. Android文件的读写
  18. Android NDK学习(1) 简介
  19. ubuntu16.0.4安装mysql5.7以及设置远程访问
  20. JavaScript arguments你不知道的秘密

热门文章

  1. HTMLDOM中三种元素节点、属性节点、文本节点的测试案例
  2. Timestamp 使用
  3. Android Studio模拟器的问题及解决办法
  4. js网页中调用本地应用程序
  5. PHPCMS调用form类编辑器editor函数动态上传图片附件
  6. DEV控件GridControl常用属性设置
  7. BZOJ2049——[Sdoi2008]Cave 洞穴勘测
  8. 使用MyEclipse生成Java注释时,使用的Code Template
  9. CCF 模拟D 动态规划
  10. BZOJ 4580: [Usaco2016 Open]248