总览
本文通过自定义classload实现加载指定的插件类,并运行的功能。通过使用java的security机制,降低加载的插件对系统造成破坏性的可能,比如需要限制插件调用System.exit(),调用获取jvm系统参数,读写文件和建立远程连接等。
插件示例
插件接口定义
/**
* Description 公开的插件接口,有插件提供方实现
* Author
* Date 2022/7/14 13:53
*/
public interface PlugOpenApi {
/**
*插件的启动方法
* @return
*/
int start();
/**
* 插件的停机方法
* @return
*/
int shutdown();
}
上游使用者给定的实现示例,其中包含系统推出的调用
/**
* Description 插件的示例实现
* Author
* Date 2022/7/14 13:55
*/
public class HelloWordPlugDemo implements PlugOpenApi {
ScheduledExecutorService service = new ScheduledThreadPoolExecutor(1);
/**
* 插件实现,延迟一秒打印hello word 然后调用系统 GC 和 关闭系统(模拟对系统的破坏)
*
* @return
*/
@Override
public int start() {
service.schedule(() -> System.out.println("hello word")
, 1L, T