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 官方网站没有写在项目列表中