插件如何在Java中共享类的接口而不公开整个源代码(如.h文件)
我正在用Java构建一个基于插件的程序,我希望保持项目源代码封闭,但允许第三方开发人员创建插件。我使用的系统正在工作,但这仅仅是因为我(当然)可以完全访问源代码
基本上,插件继承自插件。java,它们可以使用ServerManager。java来执行某些关键功能。如何使用户能够看到这些类的接口(即,他们知道ServerManager有一个sendMessage()函数,插件类可以重写onMessage()函数),而无需向他们提供完整的源代码
来自Objective-C背景,我会使用。这些“接口”和的h文件。m源文件(私有)-然后我只提供源文件。h文件——显然,在Java中没有类似于文件的东西。h文件
提前感谢:)
# 1 楼答案
你可以在这里点类似的东西。包装一个开源接口,客户端将在他这边执行
大多数JavaEE世界都是这样工作的。例如,您有一个像这样的接口定义http://jsr311.java.net/nonav/javadoc/index.html,并且有多个不同的供应商i设备。类似地,您的代码将有一个用于访问插件的接口
Atlassian Confluence完成了一个类似的实现,其中产品是封闭源代码的,除非您拥有源代码的特定许可证,但插件开发是完全分离的:https://developer.atlassian.com/display/CONFDEV/Confluence+Plugin+Guide
# 2 楼答案
因为java有SPI服务提供者接口。这里有一个article
该机制有一个接口,公开提供,最好在自己的库中
(几个)实现者提供了一个jar,其中一个(或多个)实现类在META-INF下接口名为的文本文件中指定
然后java有一个API来选择一个实现,或者列出所有实现
这是一个相对简单和通用的机制,看看官方的javadoc。对于XML实现,使用它
# 3 楼答案
一种方法是创建一个接口,将其公开,并提供该接口的实现
例如:
然后在私有文件中定义实际类:
您可以提供一个Factory类,为用户大量生产MyLight对象
# 4 楼答案
如果您希望任何人都看不到您的核心代码,那么您可以对所需的代码进行模糊处理,您希望向客户端公开以创建插件的部分可以从模糊处理中跳过