Spring中的包的非递归扫描

时间:2016-07-11 12:40:51

标签: java spring applicationcontext

显然,AnnotationConfigApplicationContext#scan()递归扫描包。

我不确定,但是我的@Component类中的一个明显加载而没有明确提到任何地方,除了在提到的包的子包内。

所以第一个问题:Spring是否真的以递归方式扫描包?

第二个问题,如果是真的,是如何禁用它?

3 个答案:

答案 0 :(得分:0)

Spring @Component API

所述
  

表示带注释的类是"组件"。使用基于注释的配置和类路径扫描时,此类被视为自动检测候选

关于扫描和/或注释配置&设置检查this answer,我无法更好地解释

答案 1 :(得分:0)

关于禁用子包扫描:我认为this会回答您的问题(或者问题的第二大投票答案)。

答案 2 :(得分:0)

在@Configuration文件中,可以通过@ComponentScan注释明确定义应扫描哪些包:

e.g。

@Configuration
@ComponentScan(basePackages = "my.package.first, my.package.second,
               my.package.etc")

但请注意,这些包的子包中的所有@Components都将自动包含在内。如果您希望禁用此功能,可以通过将过滤器应用于@ComponentScan

来完成

@ComponentScan(basePackages = "my.package", excludeFilters = 
               @ComponentScan.Filter(type = FilterType.ASPECTJ, 
               pattern = "my.package.*"))