显然,AnnotationConfigApplicationContext#scan()递归扫描包。
我不确定,但是我的@Component
类中的一个明显加载而没有明确提到任何地方,除了在提到的包的子包内。
所以第一个问题:Spring是否真的以递归方式扫描包?
第二个问题,如果是真的,是如何禁用它?
答案 0 :(得分:0)
表示带注释的类是"组件"。使用基于注释的配置和类路径扫描时,此类被视为自动检测候选。
关于扫描和/或注释配置&设置检查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.*"))