基于commons-discovery 开发简单的插件化java系统

commons-discovery 是一个工具包,基于此我们可以实现java class 的发现,实现一个简单的插件化系统(类似spi)

提供的方法

参考如下,提供了静态以及实例方法,还是比较方便的,静态方法可以用来扩展spi 的处理,简单场景使用实例方法就可以了

 

 

  • 参考使用
    静态方法
 
Properties properties = new Properties();
properties.setProperty("com.dalong.ILogin","com.dalong.DemoLogin");
SPInterface<ILogin> spInterface= new SPInterface(ILogin.class,new Class[]{String.class},new Object[]{"001"});
JarClassLoader classLoader = new JarClassLoader();
ClassLoaders classLoaders = new ClassLoaders();
classLoaders.put(classLoader);
ILogin login= DiscoverClass.newInstance(classLoaders,spInterface, new PropertiesHolder(properties),null);
String result = login.token("name","demoapp");
System.out.println(result);

实例方法

DiscoverClass discoverClass = new DiscoverClass();
Properties properties = new Properties();
properties.setProperty("com.dalong.ILogin","com.dalong.DefaultLogin");
ILogin login= discoverClass.newInstance(ILogin.class,properties);
String result = login.token("name","demoapp");
System.out.println(result);

说明

commons-discovery 扩展了spi 的处理,同时也可以定义自己的类加载器,比如我们结合janino 的JavaSourceClassLoader 以及
jcl-core 提供的网络classloader,可以实现一个方便灵活的插件化系统,说明commons-discovery 实际上是属于apache common的一部分
只是目前缺少维护了(毕竟很稳定),而且common 官方网站没有写在项目列表中

参考资料

https://commons.apache.org/dormant/commons-discovery/
https://github.com/kamranzafar/JCL
https://github.com/janino-compiler/janino

posted on 2022-01-23 19:58  荣锋亮  阅读(1279)  评论(0编辑  收藏  举报

导航