加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用带有多个jar文件的ClassPathScanningCandidateComponentProv

发布时间:2020-12-14 05:56:52 所属栏目:Java 来源:网络整理
导读:我正在寻找使用ClassPathScanningCandidateComponentProvider来查找我的JVM中特定类的子类. 我正在做的就是这里描述的内容:Scanning Java annotations at runtime 但是,当我从ant调用代码时,通过JMX bean我遇到了一个严重的问题. 我用搜索包调用:ClassPath
我正在寻找使用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);

...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读