外部启动OSGI以及调用OSGI插件里面的类

时间:2023-01-18 12:47:46

《OSGI原理与最佳实践》一书中已经给出了基本的方式,这里在林昊的基础上增添几行代码完成一个可用的例子:

 

 1 首先建立几个插件工程,并导出成插件包,这里将导出的插件包统一放置到G://osgi_prj//system_bundle目录下

 2 建立java project,并写一个带main方法的类,用于启动OSGI以及先前的插件

 源码:

 

3 运行便可以看到调用到了osgi的内部类方法

 

说明:osgi里面的bundle是通过自己的classloader加载内部类,所以只能通过反射进入指定bundle获取class,而不能将包导入调用工程中,这里也可以看到findbyproperty方法只能返回不带类型的List,如果换成List<Message>将会出错,因为调用工程与插件的class不一样。