Spring - 是否有可能获得所有使用@ComponentScan注册的软件包?

时间:2015-01-18 21:15:16

标签: java spring spring-mvc

是否可以获取使用@ComponentScan注册的所有包的列表? 我需要知道,在我的Spring Boot应用程序中注册了什么(root?)包...

2 个答案:

答案 0 :(得分:1)

可能是长镜头,但每个@ComponentScan都应该与@Configuration一起使用(这只是另一种spring bean)。因此,您可以枚举应用程序上下文中的所有bean,并通过reflection检查哪些bean具有@ComponentScan并获取其值。

答案 1 :(得分:1)

可能的解决方案 - Scanning Java annotations at runtime

使用org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

API

  

从基础包扫描类路径的组件提供程序。它   然后将排除和包含过滤器应用于结果类   找候选人。

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFAULT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());