基于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   荣锋亮  阅读(1404)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-01-23 cube.js 动态schema 编译处理
2017-01-23 Automating CSS Regression Testing
2014-01-23 vertx.io 与nodejs 一个简单的性能比较

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示