我是Java的新手,我正在为以下问题寻找合适的解决方案。 我开发了一个以常见方式执行某些操作的应用程序。现在我希望这个应用程序能够将标准行为修改为更具体的内容,具体取决于使用通用接口的外部类或jar文件(可能实际安装,也可能不实际安装)。假设这些外部文件将比主应用程序更频繁地升级,这是我希望它们保持分离的主要原因。 这项任务的正确方法是什么?反射能够做到这一点吗? 谢谢!
答案 0 :(得分:1)
如果你将jar添加到你的classPath,你就可以加载它,从而产生插件的效果。
但是一旦你将它加载到classLoader中,就不能简单地刷新类定义(如果你需要动态更新它)。
如果您需要动态更新,可以使用OSGi等解决方案。如果你每次更新插件都可以重新启动它,你可以使用一些简单的IoC容器,如Spring,Guice或Tapestry IoC。
有一个有趣的帖子here可能会让你感兴趣,在这种情况下,要加载的模块会在启动时被发现并加载加载类路径上的插件(每个都可以是一个jar)。
答案 1 :(得分:0)
斯派斯说的话。但是,如果您需要在不重新启动应用程序的情况下替换类,则可以使用Commons JCI的ReloadingClassloader。