通过属性文件的java插件规范
我有一个项目,我想添加插件。我有所有的接口/工厂等。设置(我的网关接口称为通过属性文件的java插件规范,java,plugins,Java,Plugins,我有一个项目,我想添加插件。我有所有的接口/工厂等。设置(我的网关接口称为ApplicationMonitorFactory),我只需要找到一种方法来定位/激活插件。我的配置文件是一个java属性文件 我想我需要做的是: 找到一种指定一组或多个插件的好方法 对于每个插件,运行它 1.找到一种指定一组或多个插件的好方法 比如: application.plugins=foo-monitor.jar,bar-monitor.jar 我认为最好指定一个jar文件列表;对于指定的每个jar文件,其含
ApplicationMonitorFactory
),我只需要找到一种方法来定位/激活插件。我的配置文件是一个java属性文件
我想我需要做的是:
1.找到一种指定一组或多个插件的好方法 比如:
application.plugins=foo-monitor.jar,bar-monitor.jar
我认为最好指定一个jar文件列表;对于指定的每个jar文件,其含义是它包含一个或多个实现ApplicationMonitorFactory
的类,这些类将被实例化。(我还可以添加注释@ApplicationMonitorPlugin
,以便.jar文件可以有一个未实例化的测试ApplicationMonitorFactory)
这听起来合理吗?
2.对于每个插件,运行它
我以前做过一次,如果我没记错的话,我想我需要使用一个自定义类加载器来动态地将适当的.jar文件添加到类路径中。或者有更简单的方法吗?我可以建议改用OSGI吗?如果它是一个服务器端项目,那么类似的东西在插件部署和规范方面为您提供了很多现成的东西 根据您目前的情况回答问题: 1.找到一种指定一组或多个插件的好方法 属性文件方法很好。如果您想进行热部署,您可能只希望能够将插件放入您监视的文件夹中。一个插件只有一个jar文件,这就限制了插件开发人员将所有依赖项打包到一个jar文件中(maven shade插件对此很有用)。注释方法应该有效(Servlet3.0使用的方法)。使用OSGI,您将拥有一个带有Bundle Activator属性的清单文件,该属性将引用应该实例化的插件类 2.对于每个插件,运行它 是的,您需要为Jar文件启动一个类加载器。这就是事情变得有点棘手的地方。这很容易做到,但是类加载有各种各样的问题。这正是OSGI真正有帮助的地方,尽管这有点前期成本