当前位置: 首页 > 面试题库 >

用Java构建插件系统的最佳方法

翟淮晨
2023-03-14
问题内容

你将如何为Java应用程序实现插件系统?

是否有一个易于使用的(对于开发人员而言)系统可以实现以下目的:

  • 用户将其插件放入应用程序的子目录中
  • 插件可以提供配置屏幕
  • 如果使用框架,那么许可证是否与商业开发兼容?

问题答案:

首先,你需要一个所有插件都需要实现的接口,例如

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

然后,插件作者应将其插件捆绑到JAR文件中。你的应用程序将打开JAR文件,然后可以使用JAR清单中的属性或JAR文件中所有文件的列表来查找实现你的Plugin接口的类。实例化该类,插件即可使用。

当然,你可能还希望实现某种沙箱操作,以使该插件在它可以做什么和不能做什么方面受到限制。我创建了一个小型测试应用程序(并向其发布了博客),该应用程序由两个插件组成,其中一个被拒绝访问本地资源。



 类似资料:
  • 问题内容: 我是NHibernate(和ORMS)的新手,并试图掌握它提供的各种选择。作为参考,我将Fluent NHibernate与单独的业务对象配合使用,而后者又将DTO纯粹用于数据访问。我的应用程序体系结构必须同时支持Windows和Web“前端”。 我的选择是一般方法之一,因为似乎有很多选择。我的DTO看起来像下面的示例。每个DTO都有对ISession的引用,该引用从BO传递给它们。他

  • 问题内容: 我们的代码使用了许多系统属性,例如’java.io.tmpdir’,’user.home’,’user.name’等。我们在任何地方都没有为这些常量定义任何常量(我认为Java也没有)或处理它们的任何其他聪明的事情,因此它们在整个代码中都是乱七八糟的。 每个人如何使用系统属性? 问题答案: 我将把它当作您遍历整个代码的任何其他String常量,并为其定义一个常量变量。当然,在这种情况下

  • 我更喜欢第一种方式,因为我认为在构建器中重复它们是多余的。第一种方法是否存在一些缺点? 提前谢谢,抱歉我的英语不好。

  • 但它没有找到9461号的所有匹配项。有没有人可以建议一个更好的UNIX/Linux命令来实现这一点。 它获取的文件类型为:、、、等文件,但它无法获取文件

  • https://marketplace.visualstudio.com/#VSCode Node.js插件支持 https://github.com/SamVerschueren/vscode-ava

  • YOG2 插件系统是整个框架的骨架。在 YOG2 中,从中间件管理到日志系统和FIS静态资源管理,所有功能的引入都是以插件的形式引入的,因此在了解每个功能的具体用法之前,我们需要对插件系统有一个整体的了解。 YOG2 插件系统的设计目标是 通过插件系统实现功能与配置的分离 功能由插件自身实现 配置由插件系统统一管理,完全暴露给用户 这样设计的优点是我们可以对 yog2 project 的运行时核心