我正在考虑使用 ClassPathScanningCandidateComponentProvider 在 JVM 中查找特定类的子类。
我正在做的事情几乎完全按照这里描述的进行:在运行时扫描Java注释 https://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime
然而,当我通过 JMX bean 从 ant 调用代码时,我遇到了一个严重的问题。
我使用搜索包调用:ClassPathScanningCandidateComponentProvider.findCandidateComponents:“com.mycompany”
但是,我的类路径中有多个 jar 文件,其中包含以该包开头的类。 Spring 在第一个扫描完成后停止扫描(我知道这一点,就好像我搜索 java.lang.Object 的子类一样,我在一个 jar 文件中得到了所有类)。
有没有办法告诉 ClassPathScanningCandidateComponentProvider/Spring 在第一个 jar 之后不要停止扫描?
Cheers
事实证明,我必须显式定义 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);
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)