Chr*_*way 18 java plugins osgi guice peaberry
我想在Java应用程序中实现动态插件功能.理想的情况是:
Plugin
使用类似的方法定义接口getCapabilities()
.pluginX.jar
包含PluginXImpl
实现Plugin
(可能还有其他一些)的类的JAR .pluginX.jar
特殊目录或设置指向它的配置参数.用户不一定必须包含pluginX.jar
在他们的类路径中.PluginXImpl
(可能通过JAR清单,可能通过反射)并将其添加到注册表中.PluginXImpl
例如通过调用类似的方法来获取实例getPluginWithCapabilities("X")
.用户不一定必须知道插件的名称.我有一种感觉,我应该能够用peaberry做到这一点,但我无法理解文档.我花了一些时间学习Guice,所以我的首选答案不是"使用Spring Dynamic Modules".
任何人都可以给我一个简单的想法,如何使用Guice/peaberry,OSGi,或只是简单的Java?
jar*_*bjo 17
使用普通Java意味着这很简单:
由于您不希望用户在启动应用程序之前配置类路径,因此我首先要创建一个URLClassLoader,其中包含插件目录中文件的URL数组.使用File.listFiles查找所有插件jar,然后使用File.toURI().toURL()获取每个文件的URL.您应该将系统类加载器(ClassLoader.getSystemClassLoader())作为父类传递给URLClassLoader.
如果插件jar包含META-INF/services中的配置文件,如java.util.ServiceLoader的API文档中所述,您现在可以使用ServiceLoader.load(Plugin.class,myUrlClassLoader)来获取插件接口的服务加载器并在其上调用iterator()以获取所有已配置的插件实现的实例.
你仍然需要提供你自己的包装来过滤插件功能,但我认为这应该不会太麻烦.
归档时间: |
|
查看次数: |
7318 次 |
最近记录: |