《JAVA核心知識》學習筆記(6. Spring 原理)-5
它是一個全面的、企業應用開發一站式的解決方案,貫穿表現層、業務層、持久層。但是 Spring
仍然可以和其他的框架無縫整合。
6.1.1. Spring 特點
6.1.1.1. 輕量級
6.1.1.2. 控制反轉
6.1.1.3. 面向切面
6.1.1.4. 容器
6.1.1.5. 框架集合
6.1.7. Spring IOC 原理
6.1.7.1. 概念
Spring 通過一個配置檔案描述 Bean 及 Bean 之間的依賴關係,利用 Java 語言的反射功能例項化
Bean 並建立 Bean 之間的依賴關係。 Spring 的 IoC 容器在完成這些底層工作的基礎上,還提供
了 Bean 例項快取、生命週期管理、 Bean 例項代理、事件釋出、資源裝載等高階服務
6.1.7.2. Spring 容器高層檢視
Spring 啟動時讀取應用程式提供的 Bean 配置資訊,並在 Spring 容器中生成一份相應的 Bean 配
置登錄檔,然後根據這張登錄檔例項化 Bean,裝配好 Bean 之間的依賴關係,為上層應用提供準
備就緒的執行環境。 其中 Bean 快取池為 HashMap 實現
6.1.7.3. IOC 容器實現
BeanFactory-框架基礎設施
BeanFactory 是 Spring 框架的基礎設施,面向 Spring 本身; ApplicationContext 面向使用
Spring 框架的開發者,幾乎所有的應用場合我們都直接使用 ApplicationContext 而非底層
的 BeanFactory。
ApplicationContext 面向開發應用
ApplicationContext 由 BeanFactory 派 生 而 來 , 提 供 了 更 多 面 向 實 際 應 用 的 功 能 。
ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 介面,在此基礎
上,還通過多個其他的介面擴充套件了 BeanFactory 的功能
1.1..1.1.1 BeanDefinitionRegistry 登錄檔
1. | Spring 配置檔案中每一個節點元素在 Spring 容器裡都通過一個 BeanDefinition 物件表示, 它描述了 Bean 的配置資訊。而 BeanDefinitionRegistry 介面提供了向容器手工註冊 BeanDefinition 物件的方法。 |
1.1..1.1.2 | BeanFactory 頂層介面 |
2. | 位於類結構樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中 返回特定名稱的 Bean, BeanFactory 的功能通過其他的介面得到不斷擴充套件: |
1.1..1.1.3 | ListableBeanFactory |
3. 該介面定義了訪問容器中 Bean 基本資訊的若干方法,如檢視 Bean 的個數、獲取某一型別
Bean 的配置名、檢視容器中是否包括某一 Bean 等方法;
1.1..1.1.4 HierarchicalBeanFactory 父子級聯
1. ClassPathXmlApplicationContext:預設從類路徑載入配置檔案
13/04/2018 Page 123 of 283
2. FileSystemXmlApplicationContext:預設從檔案系統中裝載配置檔案
3. ApplicationEventPublisher:讓容器擁有釋出應用上下文事件的功能,包括容器啟動事
件、關閉事件等。
4. MessageSource:為應用提供 i18n 國際化訊息訪問的功能;
5. ResourcePatternResolver : 所 有 ApplicationContext 實現類都實現了類似於
PathMatchingResourcePatternResolver 的功能,可以通過帶字首的 Ant 風格的資源文
件路徑裝載 Spring 的配置檔案。
6. LifeCycle:該介面是 Spring 2.0 加入的,該介面提供了 start()和 stop()兩個方法,主要
用於控制非同步處理過程。在具體使用時,該介面同時被 ApplicationContext 實現及具體
Bean 實現, ApplicationContext 會將 start/stop 的資訊傳遞給容器中所有實現了該接
口的 Bean,以達到管理和控制 JMX、任務排程等目的。
7. ConfigurableApplicationContext 擴充套件於 ApplicationContext, 它新增加了兩個主要
的方法: refresh()和 close(),讓 ApplicationContext 具有啟動、重新整理和關閉應用上下
文的能力。在應用上下文關閉的情況下呼叫 refresh()即可啟動應用上下文,在已經啟動
的狀態下,呼叫 refresh()則清除快取並重新裝載配置資訊,而呼叫 close()則可關閉應用
上下文
WebApplication 體系架構
WebApplicationContext 是專門為 Web 應用準備的,它允許從相對於 Web 根目錄的
路徑中裝載配置檔案完成初始化工作 。從 WebApplicationContext 中可以獲得
ServletContext 的引用, 整個 Web 應用上下文物件將作為屬性放置到 ServletContext
中,以便 Web 應用環境可以訪問 Spring 應用上下文