OSGi的jar与普通jar的区别

  • 为普通的jar增加一个META-INF/MANIFEST.MF文件,该jar就成为了OSGi的Bundle
  • MANIFEST.MF文件中定义了一些导入导出包以及激活器等

MANIFEST.MF的特殊使用

  • DynamicImport-Package

    • 动态导入包,例如开发swing应用,可以导入javax.swing.*
    • 开发Gemini Blueprint应用,不确定需要导入spring的哪些包,可以动态导入org.springframework.*
    • 动态导入包可以解决一些运行时依赖,在对已有的ClassLoader部分代码无法绕过时,通常可以使用动态导入解决
  • Fragment-Host

    • 定义父插件
    • 子插件使用父插件的ClassLoader,可以通过子插件作为扩展

Fragment-Host高阶应用

  • 在父插件里写接口/配置文件的初始化逻辑
  • 在子插件里提供接口实现或配置文件

已监控为例,监控里有一个ExpressionExecutor表达式执行器这样一个类,其通过查找子插件实现类以及ServiceTracker的两种方式来预留给使用者自行完成,而不用修改父插件。在父插件定义接口,在子插件的MANIFEST.MF文件中定义接口实现,并在父插件中读取

ExpressionExecutor: com.your.package.SomeExecutor

标签: Java, OSGi

添加新评论