一、Spring 官方文檔中給出的 Spring 的整體結構。
二、我自己所理解的 Spring 整體結構圖。
三、本次總結 Spring 核心部分
1.從上面圖中可以看出,Beans 和 Context 和 Core 組件作為 Spring 的核心組件,它們構成了整個 Spring 的骨架。
2.從根本說來說,Spring 最終操縱的還是 Bean,所以說 Bean 是整個 Spring 核心中的核心。
3.和正常編程的思想不同,Spring 把對象之間的依賴關系轉而由配置文件進行管理,也就是他的依賴注入機制。而這個注入關系在一個 IOC 容器中進行管理。
IOC 容器中包含有什麼?其實就是被一個個 bean 包含的對象。IOC 容器可以看成是 beans 關系的一個集合。
4.這種設計策略完全類似於 Java 實現的 OOP 設計理念,構建一個數據結構,然後根據這個數據結構設計它的生存環境,並賦給它生命周期,使他在一定規律下
不停的運動,在不停運動的過程中完成與其他個體的交互。
5.核心組件之間如何進行協同工作的:舉一個非常好的例子,如果說 Bean 是一場話劇的演員的話,那麼 Context 就是舞台,而 Core 就是道具,它們三個是演話劇最基本的元素。
我們知道 Bean 包裝的是一個 Object,而 Object 中存在數據,而給這些數據提供生存環境就是 Context 要解決的問題,對於 Context 而言,它要發現每個 Bean,以及 Bean 與
Bean 之間的關系,建立和維護好這種關系。所以 Context 就是 Bean 關系的集合,這個關系集合又叫 IOC 容器,而一旦建立起這個容器,Spring就可以進行工作了。那麼 Core 是
用來做什麼的呢?發現、建立和維護 Bean 之間的關系所需要的一系列的工具,它為 Bean 組件和 Context 組件提供了支持。
四、Bean 組件
1.Bean 組件位於 Spring 的 org.springframework.beans 包下。
而這個包下的所有類主要解決了三件事情:Bean 的定義、Bean 的創建以及對 Bean 的解析。對於使用者來說,我們只需要關注 Bean 的創建就 ok。其他兩個由 Spring 完成。
2.Spring Bean 的創建是典型的工廠模式,他的頂級接口是 BeanFactory。
3.Bean 的定義主要由 BeanDefinition 描述,Bean 的定義就是描述了在 Spring Config 文件中 <bean> 節點及其子節點的所有信息。
當 Spring 成功解析你定義的一個 <bean> 節點後,在 Spring 內部就會轉化為 BeanDefinition 對象。以後所有的操作都是由這個對象來完成。
4.Bean 的解析主要就是對 Spring 配置文件的解析,頂級接口為 BeanDefinitionReader 和 BeanDefinitionDocumentReader。
五、Context 組件
1.Context 組件位於 Spring 的 org.springframework.context 包下,它的作用就是為 Bean 提供一個運行時環境,並且維護好 Bean 之間的關系。
2.BeanFactory 作為 Context 的頂級接口。
ApplicationContext 為 Context 組件的常用接口,它除了能標識一個應用環境的基本信息外,他還繼承了6個接口,他們擴展了 Context 的功能。
從上圖可以看出 ApplicationContext 接口繼承了 BeanFactory 接口,由此也可以看出 Spring 運行的主體是 Bean。另外間接繼承了 ResourceLoader 接口,
也就可以訪問到外部資源。
然後再看它的兩個子接口:
(1).ConfigurableApplicationContext 表示該 Context 是可以修改的,也就是說在構建 Context 時用戶可以添加或修改已有的配置。
(2).WebApplicationContext 就是為 Web 環境准備的 Context,它可以訪問到 ServletContext。
對於 ApplicationContext 來說,必須要完成的幾件事情:
(1)標識一個應用環境
(2)利用 BeanFactory 創建 Bean 對象
(3)保存對象關系表
(4)能夠捕獲各種事件
Context 作為 Spring 的 IOC 容器,基本上整合了 Spring 的大部分功能,或者說是大部分功能的基礎。
六、Core 組件
1.Core 組件作為 Spring 的核心組件,它其中包含了很多關鍵的類,其中一個重要的組成部分就是定義了資源的訪問方式。將所有資源都抽象為一個接口 Resource。
Resource 類結構圖:
從上圖可以看到 Resource 類封裝了各種可能的資源類型,繼承了 InputStreamSource 接口,對使用者來說屏蔽了資源類型的不同。所有資源都可以通過 getInputStream() 獲取到。
2.Context 與 Resource 之間的關系:Context 是把資源的加載、解析和描述工作委托給 ResourcePatternResolver 類來完成,他把資源的加載、解析和資源的定義整合到了一起便於
其他組件使用。
七、IOC 容器是如何進行工作的
1.IOC 容器實際上就是結合其他兩個組件共建了一個 bean 關系網。
2.如何創建 BeanFactory 工廠
3.如何創建 Bean 實例並構建 Bean 之間的關系網
4.如何對 Bean 進行擴展
八、上面內容是從宏觀上對 Spring 核心的三個組件進行了介紹,其中大部分內容是借鑒的別人的,下面列出具體知識細節
9.最後想說的是,我自己認為如果想學好 Spring 的話,必須對其思想有所深刻理解,然後以此為驅動去學習,有章法,事半功倍。
Spring中如何配置Hibernate事務 http://www.linuxidc.com/Linux/2013-12/93681.htm
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
基於 Spring 設計並實現 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm
Spring-3.2.4 + Quartz-2.2.0集成實例 http://www.linuxidc.com/Linux/2013-10/91524.htm
使用 Spring 進行單元測試 http://www.linuxidc.com/Linux/2013-09/89913.htm
運用Spring注解實現Netty服務器端UDP應用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm
Spring 3.x 企業應用開發實戰 PDF完整高清掃描版+源代碼 http://www.linuxidc.com/Linux/2013-10/91357.htm
Spring 的詳細介紹:請點這裡
Spring 的下載地址:請點這裡