java - 实现模块化架构/简单的插件系统

标签 java plugins architecture

我编写了一个简单的程序,从 XML 文件中获取一些命令,执行它,检查命令的错误,通过邮件报告等。命令的条目看起来例如像这样:

<command>C:\Program Files\Test\test.exe /xyz</command>

现在我想介绍一些插件:

<command myPlugin1="abc,1" myPlugin2="def">C:\Program Files\Test\test.exe /xyz</command>

我考虑将插件编写为实现某些接口(interface)的 Java 类或对某些插件类进行子类化,然后使用类似的方法

pluginExec(List<String> parameters, String command)

传递参数(例如 abc,1)和命令(C:\Program Files\Test\test.exe/xyz)。 然后可能会获取命令标记的所有属性名称,即 myPlugin1 和 myPlugin2,然后在 myapp.plugins 命名空间中搜索与该属性同名的类并调用 pluginExec(...)。

对此还有什么更好的想法吗?我想我的想法需要某种反射(reflection),有没有办法不进行反射(reflection)?该应用程序是一个私有(private)工具,无需重新编译软件即可添加插件。我只是不想每次都更改代码,我只想插入我的新插件类。

最佳答案

如果您开发的基于插件的程序在未来不会有很大增长,那么您的设计就很好。

但是,如果您希望它能够增长并且希望为其添加多个功能,那么我建议您尝试像 OSGi 这样的 Java 标准。

关于java - 实现模块化架构/简单的插件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239713/

相关文章:

asp.net - 这种 ASP.NET 继承共享函数做法可以接受吗?

java - 尝试使用 java 中的线程写入图像时出现 FileNotFoundException

Java EE + Wildfly : Failed to start service jboss. 持久单元

上界和下界通配符的 Java 泛型

eclipse - 手动安装grails

java - Spigot PlayerInteractEntityEvent

Java:如何将代码从按钮单击更改为onload

maven - purge-local-repository 实际清除了什么?

security - 斯科特·汉瑟曼(Scott Hanselman)表演的#135咳嗽糖浆过多吗?

architecture - Neo4j 实现评论