Discovery 组件用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法。
示例代码:
import org.apache.commons.discovery.DiscoverClass;
import org.apache.commons.logging.LogFactory;
...
DiscoverClass discoverClass = new DiscoverClass();
Class logFactoryClass = (LogFactory)discoverClass.find(LogFactory.class);
使用Apache Commons Discovery查找可插拔接口实现类(Pluggable interfaces): http://terrencexu.iteye.com/blog/715982 eclipse source code:
DiscoveryClient接口 public interface DiscoveryClient extends Ordered { int DEFAULT_ORDER = 0; String description(); List<ServiceInstance> getInstances(String serviceId); List<String>
笔者的一个项目是Maven项目,通过使用tomcat的Maven插件启动的时候抛出了这个异常,异常的完整信息是:org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.
起因:spring boot 引入一个web service client 服务,写的定时任务例子,发现执行报错:java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton。 解决: 缺少相关依赖包,但工程的build path -> configure build path -> lib