版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/85630233
概述
ComponentScanAnnotationParser
是Spring
的一个内部工具,它会基于某个类上的@ComponentScan
注解属性分析指定包(package
)以获取其中的bean
定义。
所分析的包可以是多个包。
你可以简单地将ComponentScanAnnotationParser
理解成注解@ComponentScan
的处理器:
- 输入 :
@ComponentScan
注解信息 - 处理 :
- 执行
ClassPathBeanDefinitionScanner
的扫描逻辑- 扫描输入信息所指定的各个包以发现
bean
定义 - 注册扫描得到的每个
bean
定义到容器
- 扫描输入信息所指定的各个包以发现
- 执行
- 输出 : 输入信息所指定的包中所有的
bean
定义
它对注解
@ComponentScan
的处理在应用启动过程中配置类分析阶段进行。具体的可以参考ConfigurationClassParser#doProcessConfigurationClass
。
所分析的包(package
)包括 :
- 注解属性中属性
basePackages
所指定的包(package
) - 注解属性中属性
basePackageClasses
指定的类所在的包(package
) - 注解属性的注解类所在的包(
package
)- 仅在
basePackages
,basePackageClasses
都为空时才生效
- 仅在
ComponentScanAnnotationParser
最终所使用的扫描器是ClassPathBeanDefinitionScanner
。
ComponentScanAnnotationParser
的分析流程其实是从注解属性中提取有关信息,将其设置到ClassPathBeanDefinitionScanner
扫描器上,然后调用ClassPathBeanDefinitionScanner
执行bean
定义的扫描和到容器的注册。
ComponentScanAnnotationParser
所在包:org.springframework.context.annotation