1. 程式人生 > >Spring 內部工具 : ComponentScanAnnotationParser -- @ComponentScan註解處理器

Spring 內部工具 : ComponentScanAnnotationParser -- @ComponentScan註解處理器

概述

ComponentScanAnnotationParserSpring的一個內部工具,它會基於某個類上的@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

相關文章

Spring 工具類 ConfigurationClassParser 是如何工作的 ?