Java 在API和软件之间交换变量';s核心

Java 在API和软件之间交换变量';s核心,java,plugins,add-on,Java,Plugins,Add On,我正在开发一个屏幕截图软件,可以从JAR加载插件。这些插件是使用API包开发的,API包由要实现的接口组成,因此想要制作插件的人不必使用完整的源代码 这对于添加like操作(例如上传到X或X主机)很有效,但是如果我想以另一种方式发送变量,比如从插件发送到核心,该怎么办?我该怎么做 我能想到的唯一解决方案是使用回调,但我觉得这并不是那么干净 顺便问一下,我的解决方案是使用devs实现的接口,然后我实例化它是正确的吗?还是有更好的办法 您的解决方案是实现此类场景的最常用方法。您为插件提供一个类的实例

我正在开发一个屏幕截图软件,可以从JAR加载插件。这些插件是使用API包开发的,API包由要实现的接口组成,因此想要制作插件的人不必使用完整的源代码

这对于添加like操作(例如上传到X或X主机)很有效,但是如果我想以另一种方式发送变量,比如从插件发送到核心,该怎么办?我该怎么做

我能想到的唯一解决方案是使用回调,但我觉得这并不是那么干净


顺便问一下,我的解决方案是使用devs实现的接口,然后我实例化它是正确的吗?还是有更好的办法

您的解决方案是实现此类场景的最常用方法。您为插件提供一个类的实例(由core实例化),插件可以存储它以供将来使用(例如,将数据传递给core或触发另一个操作)。通常,此类类的名称以上下文结尾(例如BundleContext、PluginContext等)

另一种模式是使用一种中介类。一个包含一些静态方法的类,插件可以使用这些方法将一些数据发送到核心或触发一些操作。我不喜欢它,它不是一个非常干净的解决方案,但它使插件开发人员更容易访问API,因为他们不需要存储上下文实例并尊重其生命周期。此模式在IntelliJ IDEA体系结构中广泛使用

在开发基于插件的系统时,我强烈建议您了解OSGi体系结构和API。这在这方面是有帮助的