Spring IOC 學習三 之 ApplicationContext容器面紗
第一篇:Spring IOC學習一
第二篇: Spring IOC學習二 之資源載入
有第一篇已經知道整個Spring IOC的最核心體系就是 ApplicationContext 本文就對這個體系進行學習一下。第一篇就說了ApplicationContext是Spring真正的高階容器。它比BeanFactory高階在哪裡?
1、繼承了MessageSource 提供了國際化標準訪問策略
2、繼承了ApplicationEventPublisher 提供了強大的事件機制
3、擴充套件了ResourceLoader介面,使其能批量載入資源配置
4、支援web應用
重新補一下圖
由上圖就可以明瞭的看到整個ApplicationContext 的大致體系結構
ApplicationContext 的兩個直接子類:
1、WebApplicationContext
該 介面的唯一方法就是為了給servlet 提供上下文介面
2、ConfigurableApplicationContext
以上是主要的方法
ConfigurableApplicationContext 不僅僅繼承了ApplicationContext 同時還有 Lifecycle和 Closeable。這兩個介面的作用是什麼?
1、Lifecycle 包含了是三個方法:stop,start ,isRunning 這是Spring 容器提供的對生命週期的管理,
2、Closeable 進去看就會發現就一個方法,close 這是JDK提供的一個介面,用於關閉元件釋放資源用的。
WebApplicationContext 和 ConfigurableApplicationContext 從介面介面上就會發現他們有共同的子類ConfigurableWebApplicationContext
ClassPathXmlApplicationContext 是我們最常見的Spring IOC容器。這個類是整個IOC容器的最終實現類之一,它包含了1個方法和多個構造方法,除了一個無參的構造方法外,一個ApplicationContext 引數的構造方法外,其餘所有的有參構造法最終都會執行一下2個方法的一種
第一種
第二種
第一種是手動控制是否重新整理容器,第二種是每次都重新整理
第一種是根據資源位置陣列 最終在父類AbstractRefreshableConfigApplicationContext中實現bean資源的定位,第二種是跟自己資源位置相對或絕對路徑陣列,基於給定資源載入資源的類 例項化ClassPathResource物件。
首先 super(parent) 最終是呼叫父類的構造方法,為容器設定好Bean資源的載入器,如下程式碼
PathMatchingResourcePatternResolver是建立可批量載入資源的超級介面
setConfigLocations 方法,有單字串形式和陣列形式兩種。ClassPathXMLApplicationContext是後者,FileSystemXMLApplicationContext是用的第一種
接下來就是refresh()方法,該方法最終也是要再父類中實現下面就是整個方法的說明
refresh()方法的作用是:在建立IoC容器前,如果已經有容器存在,則需要把已有的容器銷燬和關閉,以保證在refresh之後使用的是新建立起來的IoC容器。refresh的作用類似於對IoC容器的重啟,在新建立好的容器中對容器進行初始化,對Bean定義資源進行載入