天天看點

Spring IOC/DI、AOP 源碼詳解

思維導圖

Spring IOC/DI、AOP 源碼詳解

思維導圖連結

https://www.yuque.com/docs/share/13828bff-6abf-4a12-8970-d4842e8994e3?# 《Spring IOC/DI、AOP 源碼詳解》

思維導圖内容

  • Spring IOC/DIAOP
  • 核心概念
  • BeanDefinition
  • BeanDefinition 中儲存了我們的 Bean 資訊,比如這個 Bean 指向的是哪個類、是否是單例的、是否懶加載、這個 Bean 依賴了哪些 Bean 等等。
  • BeanDefinitionHolder
  • 這是 BeanDefinition 的包裝類,用來存儲 BeanDefinition,name 以及 aliases 等
  • BeanFactory & AbstractBeanFactory
  • BeanFactory 是 Bean 工廠,所有的 Bean 都有 BeanFactory 統一建立和管理,Spring 提供了一個 AbstractBeanFactory ,它實作了 BeanFactory 的大部分功能,其中有一個非常重要的方法 getBean() 。
  • BeanFactoryPostProcessor & BeanPostProcessor
  • 如果實作了 BeanFactoryPostProcessor 接口,則在 refresh 方法中調用 invokeBeanFactoryPostProcessors 中建立;如果實作了 BeanPostProcessor 則在 registerBeanPostProcessors 方法中建立。BeanFactoryPostProcessor 可以在執行個體化 Bean 被攔截調用;BeanPostProcessor 可以再 Bean 完成初始化前後,分别被攔截調用。
  • AnnotationConfigApplicationContext
  • BeanDefinitionRegistry
  • Bean 定義注冊器,實際上該接口的實作全部交給了 DefaultListableBeanFactory 實作了
  • AnnotationConfigRegistry
  • 注解配置注冊器,用于掃描注解配置
  • DefaultListableBeanFactory(包含)
  • 預設的 BeanFactory 實作
  • IOC 流程基于注解模式
  • register
  • AnnotatedBeanDefinitionReader:用于讀取基于注解的 BeanDefinition ,在這個 Reader 建立的過程中,會注冊 ConfigurationClassPostProcessor 類,其負責加載配置類中的 BeanDefinition
  • invokeBeanFactoryPostProcessors(beanFactory)
  • 負責調用 BeanFactory 的後置處理方法,所有實作了 這個接口的 Bean,在這個階段都會調用其 postProcessBeanFactory 方法。
  • registerBeanPostProcessors(beanFactory)
  • 實作了該接口的類,在其他所有類型的 Bean 初始化過程中,會在前後分别回調方法;為使用者提供了在 Bean 初始化前後,修改或者擴充 Bean 的機會。
  • finishBeanFactoryInitialization(beanFactory)
  • 主要為執行個體化所有剩餘的單例 Bean;建立過程為:根據 BeanDefinition 中的 classType ,擷取其構造函數,根據反射建立 Bean 執行個體,然後調用 populateBean 方法進行屬性設定,最後調用 initializeBean 回調一些與 Bean 生命周期相關的接口方法

參考連結

Spring IoC源碼分析(注解版) – 上/中/下

Spring 源碼學習 15:finishBeanFactoryInitialization(重點)

Spring IOC 容器源碼分析