我正在考虑使用 ClassPathScanningCandidateComponentProvider 在我的 JVM 中查找特定类的子类。
我所做的与此处描述的几乎完全相同:Scanning Java annotations at runtime
但是,当我通过 JMX bean 从 ant 调用代码时,我遇到了一个严重的问题。
我用搜索包调用:ClassPathScanningCandidateComponentProvider.findCandidateComponents:“com.mycompany”
但是,在我的类路径中有多个 jar 文件包含以该包开头的类。扫描第一个后,Spring 停止扫描(我知道这就像我搜索 java.lang.Object 的子类一样,我在一个 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);
...
关于java - 将 ClassPathScanningCandidateComponentProvider 与多个 jar 文件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807388/