gpt4 book ai didi

java - 将 ClassPathScanningCandidateComponentProvider 与多个 jar 文件一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:42 33 4
gpt4 key购买 nike

我正在考虑使用 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com