Spring註解配置分析(二)——ConfigurationClassPostProcessor處理配置類流程

  ConfigurationClassPostProcessors 是處理配置類的處理器,前面已經知道它是在初始化 AnnotationConfigApplicationContext 時添加到 BeanFactory 中,並且作爲一個 BeanDenifitionRegistryPostProcessor 在 AbstractApplicationContext 的 refresh 方法中被調用。接下來繼續分析 ConfigurationClassPostProcessor 如何處理配置類,目前理解的主要流程如下。

  1. 在 bean factory 中查找已經添加的配置類 (在以 Servlet 項目爲例子時,只有啓動類需要解析)
  2. 對上一步的configClass進行排序。
  3. 利用 ConfigurationClassParser 解析配置類(解析該配置類上的其他註解)。
    1. 調用 doProcessConfigurationClass 方法解析配置類
    2. 如果成員類也是配置類,則先解析成員類
    3. 處理配置類上的顯示或隱式的 @PropertySources 和 @PropertySource 註解
    4. 處理配置類上顯示或隱式的 @ComponentScans 和 @ComponentScan 註解,解析與其相關的配置類
    5. 處理 @Import 註解,查找配置類上顯示和隱式的 @Import 註解,保存註解的 value 值
    6. 處理 @ImportResource 註解
    7. 爲配置類添加帶 @Bean 註解的方法
    8. 查找接口中帶 @Bean 註解的方法
    9. 如果父類也是配置類,則解析父類
    10. 處理 DeferredImportSelector
  4. 將上一步解析出來的新配置類通過 loadBeanDefinitions 添加到 bean factory 中。
  5. 如果 bean factory 中有還沒有解析的配置類,重複第3步。

   有 @Configuration、@Import 、 @Component、@ComponentScan 以及 @ImportResource 這幾個註解的類都是配置類,都會對其進行上面的處理。除了 @Configuration 註解只標識爲配置類之外,另外幾個註解都有各自的作用,在配置類處理過程中會根據這些註解的參數進行處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章