基于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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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 一个简单的性能比较