SpringIOC原理與IOC容器實(shí)現(xiàn)

一. Spring IOC 原理

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供興平網(wǎng)站建設(shè)、興平做網(wǎng)站、興平網(wǎng)站設(shè)計(jì)、興平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、興平企業(yè)網(wǎng)站模板建站服務(wù),10多年興平做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

1. 概念

Spring 通過一個(gè)配置文件描述 Bean 及 Bean 之間的依賴關(guān)系,利用 Java 語言的反射功能實(shí)例化Bean 并建立 Bean 之間的依賴關(guān)系。 Spring 的 IoC 容器在完成這些底層工作的基礎(chǔ)上,還提供了 Bean 實(shí)例緩存、生命周期管理、 Bean 實(shí)例代理、事件發(fā)布、資源裝載等高級(jí)服務(wù)。

2. Spring 容器高層視圖

Spring 啟動(dòng)時(shí)讀取應(yīng)用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相應(yīng)的 Bean 配置注冊(cè)表,然后根據(jù)這張注冊(cè)表實(shí)例化 Bean,裝配好 Bean 之間的依賴關(guān)系,為上層應(yīng)用提供準(zhǔn)備就緒的運(yùn)行環(huán)境。其中 Bean 緩存池為 HashMap 實(shí)現(xiàn)

Spring IOC 原理與IOC 容器實(shí)現(xiàn)

3. IOC 容器實(shí)現(xiàn)

BeanFactory-框架基礎(chǔ)設(shè)施

BeanFactory 是 Spring 框架的基礎(chǔ)設(shè)施,面向 Spring 本身;ApplicationContext 面向使用Spring 框架的開發(fā)者,幾乎所有的應(yīng)用場(chǎng)合我們都直接使用 ApplicationContext 而非底層的 BeanFactory。

Spring IOC 原理與IOC 容器實(shí)現(xiàn)

BeanDefinitionRegistry 注冊(cè)表

(1). Spring 配置文件中每一個(gè)節(jié)點(diǎn)元素在 Spring 容器里都通過一個(gè) BeanDefinition 對(duì)象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工注冊(cè)BeanDefinition 對(duì)象的方法。

BeanFactory 頂層接口

(2). 位于類結(jié)構(gòu)樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中返回特定名稱的 Bean,BeanFactory 的功能通過其他的接口得到不斷擴(kuò)展:

ListableBeanFactory

(3). 該接口定義了訪問容器中 Bean 基本信息的若干方法,如查看 Bean 的個(gè)數(shù)、獲取某一類型Bean 的配置名、查看容器中是否包括某一 Bean 等方法;

HierarchicalBeanFactory 父子級(jí)聯(lián)

(4). 父子級(jí)聯(lián) IoC 容器的接口,子容器可以通過接口方法訪問父容器; 通過HierarchicalBeanFactory 接口, Spring 的 IoC 容器可以建立父子層級(jí)關(guān)聯(lián)的容器體系,子容器可以訪問父容器中的 Bean,但父容器不能訪問子容器的 Bean。Spring 使用父子容器實(shí)現(xiàn)了很多功能,比如在 Spring MVC 中,展現(xiàn)層 Bean 位于一個(gè)子容器中,而業(yè)務(wù)層和持久層的 Bean 位于父容器中。這樣,展現(xiàn)層 Bean 就可以引用業(yè)務(wù)層和持久層的 Bean,而業(yè)務(wù)層和持久層的 Bean 則看不到展現(xiàn)層的 Bean。

ConfigurableBeanFactory

(5). 是一個(gè)重要的接口,增強(qiáng)了 IoC 容器的可定制性,它定義了設(shè)置類裝載器、屬性編輯器、容器初始化后置處理器等方法;

AutowireCapableBeanFactory 自動(dòng)裝配

(6). 定義了將容器中的 Bean 按某種規(guī)則(如按名字匹配、按類型匹配等)進(jìn)行自動(dòng)裝配的方法;

SingletonBeanRegistry 運(yùn)行期間注冊(cè)單例 Bean

(7). 定義了允許在運(yùn)行期間向容器注冊(cè)單實(shí)例 Bean 的方法;對(duì)于單實(shí)例( singleton)的 Bean來說,BeanFactory 會(huì)緩存 Bean 實(shí)例,所以第二次使用 getBean() 獲取 Bean 時(shí)將直接從IoC 容器的緩存中獲取 Bean 實(shí)例。Spring 在 DefaultSingletonBeanRegistry 類中提供了一個(gè)用于緩存單實(shí)例 Bean 的緩存器,它是一個(gè)用 HashMap 實(shí)現(xiàn)的緩存器,單實(shí)例的 Bean 以beanName 為鍵保存在這個(gè) HashMap 中。

依賴日志框框

(8). 在初始化 BeanFactory 時(shí),必須為其提供一種日志框架,比如使用 Log4J, 即在類路徑下提供 Log4J 配置文件,這樣啟動(dòng) Spring 容器才不會(huì)報(bào)錯(cuò)。

二.ApplicationContext 面向開發(fā)應(yīng)用

ApplicationContext 由 BeanFactory 派生而來,提供了更多面向?qū)嶋H應(yīng)用的功能。

ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口,在此基礎(chǔ)上,還通過多個(gè)其他的接口擴(kuò)展了 BeanFactory 的功能:

Spring IOC 原理與IOC 容器實(shí)現(xiàn)

1. ClassPathXmlApplicationContext:默認(rèn)從類路徑加載配置文件

2. FileSystemXmlApplicationContext:默認(rèn)從文件系統(tǒng)中裝載配置文件

3. ApplicationEventPublisher:讓容器擁有發(fā)布應(yīng)用上下文事件的功能,包括容器啟動(dòng)事件、關(guān)閉事件等。

4. MessageSource:為應(yīng)用提供 i18n 國(guó)際化消息訪問的功能;

5. ResourcePatternResolver : 所 有 ApplicationContext 實(shí)現(xiàn)類都實(shí)現(xiàn)了類似于PathMatchingResourcePatternResolver 的功能,可以通過帶前綴的 Ant 風(fēng)格的資源文件路徑裝載 Spring 的配置文件。

6. LifeCycle:該接口是 Spring 2.0 加入的,該接口提供了 start()和 stop()兩個(gè)方法,主要用于控制異步處理過程。在具體使用時(shí),該接口同時(shí)被 ApplicationContext 實(shí)現(xiàn)及具體Bean 實(shí)現(xiàn), ApplicationContext 會(huì)將 start/stop 的信息傳遞給容器中所有實(shí)現(xiàn)了該接口的 Bean,以達(dá)到管理和控制 JMX、任務(wù)調(diào)度等目的。

7. ConfigurableApplicationContext 擴(kuò)展于 ApplicationContext,它新增加了兩個(gè)主要的方法: refresh()和 close(),讓 ApplicationContext 具有啟動(dòng)、刷新和關(guān)閉應(yīng)用上下文的能力。在應(yīng)用上下文關(guān)閉的情況下調(diào)用 refresh()即可啟動(dòng)應(yīng)用上下文,在已經(jīng)啟動(dòng)的狀態(tài)下,調(diào)用 refresh()則清除緩存并重新裝載配置信息,而調(diào)用 close()則可關(guān)閉應(yīng)用上下文。

三.WebApplication 體系架構(gòu)

WebApplicationContext 是專門為 Web 應(yīng)用準(zhǔn)備的,它允許從相對(duì)于 Web 根目錄的路徑中裝載配置文件完成初始化工作。從 WebApplicationContext 中可以獲得ServletContext 的引用,整個(gè) Web 應(yīng)用上下文對(duì)象將作為屬性放置到 ServletContext中,以便 Web 應(yīng)用環(huán)境可以訪問 Spring 應(yīng)用上下文。

Spring IOC 原理與IOC 容器實(shí)現(xiàn)

文章題目:SpringIOC原理與IOC容器實(shí)現(xiàn)
當(dāng)前網(wǎng)址:http://bm7419.com/article6/ijpgog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化