-
本篇文章基于spring-framework Release v5.3.5(7c2a72c) 版本進行源碼分析。
-
fork 項目地址:https://gitee.com/streamplume/spring-framework.git (v5.3.5-learning 分支根據個人理解添加了注釋)
澄清概念,設定判準,構建體系。 - 傅佩榮
-
spring-framework 可以理解成一個Bean容器管理框架。在系統運行時,由spring-framework框架統一管理Bean實例對象的創建,依賴和銷毀,而不用業務系統主動維護依賴關系。在編寫業務代碼時,只要軟件工程師按照系統規劃,做好業務邏輯類的抽象,封裝,那么在運行系統時,只要根據需要簡單修改配置,就可以輕松切換不同業務邏輯的實現。同時 spring-framework 對管理的依賴無侵入性。
-
spring-framework 項目在啟動時, 使用 ApplicationContext 實現類,創建程序運行上下文(coentext),并創建管理bean對象實例的BeanFactory, 注冊響應事件的監聽器 (Listener),并根據需要管理不同功能組件的生命周期(Lifecycle) 。
spring-framework 主要接口和實現類:
-
org.springframework.beans.factory.BeanFactory
spring-framework 核心頂層接口。定義了獲取 bean 實例和處理 bean 相關屬性判斷的標準。spring-framework主要功能都是圍繞實現該接口功能。

-
org.springframework.beans.factory.support.DefaultListableBeanFactory
spring-framework 中BeanFactory接口的默認實現類。目前運行項目時,默認使用該類管理 bean 對象實例。

-
org.springframework.context.ApplicationContext
spring-framework 運行上下文環境頂級接口。繼承 EnvironmentCapable 接口,ResourceLoader 子接口, BeanFactory 子接口,MessageSource 接口,ApplicationEventPublisher 接口,即定義了運行上下文環境 需要實現的標準。

-
org.springframework.context.support.ClassPathXmlApplicationContext
spring-framework 運行上下文環境的一個實現類。該類實現讀取 ClassPath 路徑下的xml文件,加載 bean 相關的配置,并管理 bean 的創建,依賴。

-
org.springframework.beans.factory.config.BeanFactoryPostProcessor
BeanFactory 后置處理器接口。進行 BeanFactory 類的后置處理。bean 配置文件的后置處理。

-
org.springframework.beans.factory.config.BeanPostProcessor
Bean 后置處理器接口。Bean 創建時進行特殊處理。例如 Bean 的動態代理就是通過 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator 實現。

-
org.springframework.context.event.ApplicationEventMulticaster
事件廣播器。統一管理注冊的事件監聽器。

-
org.springframework.context.ApplicationListener
事件監聽器。定義是事件監聽器使用標準。

-
org.springframework.context.ApplicationEvent
事件接口。定義了事件的標準規范。

-
org.springframework.core.convert.ConversionService
類型轉換服務接口。定義了將配置文件中字符串轉換成目標類型的標準。

-
org.springframework.core.convert.support.DefaultConversionService
類型轉換服務默認實現類。

-
org.springframework.context.Lifecycle
特殊bean生命周期管理接口。

-
org.springframework.context.LifecycleProcessor
Lifecycle 接口的統一管理類。運行上下文環境加載好后,調用 Lifecycle 接口start()的方法

參考資料:
Spring源碼深度解析31精講: https://www.bilibili.com/video/BV1iZ4y137CZ
孫哥說Spring5: https://www.bilibili.com/video/BV185411477k
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!
浙公網安備 33010602011771號