我正在寻找使用ClassPathScanningCandidateComponentProvider来查找我的JVM中特定类的子类.
我正在做的就是这里描述的内容:Scanning Java annotations at runtime
但是,当我从ant调用代码时,通过JMX bean我遇到了一个严重的问题.
我用搜索包调用:ClassPathScanningCandidateComponentProvider.findCandidateComponents:“com.mycompany”
但是,我的类路径中有多个jar文件包含以该包开头的类. Spring扫描完第一个后停止扫描(我知道这就像搜索java.lang.Object的sublasees一样,我在一个jar文件中获取所有类).
有没有办法告诉ClassPathScanningCandidateComponentProvider / Spring在第一个jar之后不要停止扫描?
干杯
解决方法
事实证明我必须明确定义ClassLoader,因为当从JMX运行扫描时,它将在不同的加载器上查找类并且什么也找不到
//Add that at top of class private static final ClassLoader classLoader = MyClass.class.getClassLoader(); ... ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider( true); provider.addIncludeFilter(new AssignableTypeFilter(forClass)); //Had to add this line provider.setResourceLoader(new PathMatchingResourcePatternResolver(classLoader)); final Set<BeanDefinition> candidates = provider.findCandidateComponents(SEARCH_PACKAGE); ...