Spring 內部工具 : ComponentScanAnnotationParser -- @ComponentScan註解處理器
阿新 • • 發佈:2019-01-12
概述
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