javascript
Spring IoC容器总结(未完)
在面向?qū)ο笙到y(tǒng)中,對(duì)象封裝了數(shù)據(jù)和對(duì)數(shù)據(jù)的處理,對(duì)象的依賴關(guān)系常常體現(xiàn)在對(duì)數(shù)據(jù)和方法的依賴上。這些依賴關(guān)系可以通過(guò)把對(duì)象的依賴注入交給框架或IOC容器來(lái)完成,這種從具體對(duì)象手中交出控制的做法是非常有價(jià)值的,它可以在解耦代碼的同時(shí)提高代碼的可測(cè)試性。
在Spring中,IoC容器是實(shí)現(xiàn)這個(gè)模式的載體,它可以在對(duì)象生成或初始化時(shí)直接將數(shù)據(jù)注入到對(duì)象中,也可以通過(guò)將對(duì)象引用注入到對(duì)象數(shù)據(jù)域中的方式來(lái)注入對(duì)方法調(diào)用的依賴。setter注入和構(gòu)造器注入是主要的注入方式。
IoC容器系列的設(shè)計(jì)與實(shí)現(xiàn):BeanFactory和ApplicationContext
1、從接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一個(gè)主要的BeanFactory設(shè)計(jì)路徑。這個(gè)接口定義中,包括了getBean()這樣的IOC容器的基本方法,通過(guò)這個(gè)方法可以從容器中取得Bean。ConfigurableBeanFactory接口中,主要定義了一些對(duì)BeanFactory的配置功能,比如通過(guò)setParentBeanFactory()設(shè)置雙親IoC容器,通過(guò)addBeanPostProcessor配置Bean后置處理等等。
2、以ApplicationContext應(yīng)用上下文為核心的接口設(shè)計(jì),主要接口設(shè)計(jì)有,從BeanFactory到ListableBeanFactory,再到ApplicationContext,再到我們常用的WebApplicationContext或者ConfigurableApplicationContext接口。我們常用的應(yīng)用上下文基本上都是ConfigurableApplicationConntext或者WebApplicationContext的實(shí)現(xiàn)。
BeanFactory接口設(shè)計(jì)了getBean方法,這個(gè)方法是使用IoC容器API的主要方法,通過(guò)這個(gè)方法,可以取得IoC容器中管理的Bean。如果需要在獲取Bean時(shí)對(duì)Bean進(jìn)行類型檢查,則可用帶參數(shù)的方法。Object getBean(String name,Class requiredType);
接口清單:
那么Spring中XML的讀取功能是怎樣實(shí)現(xiàn)的呢?
構(gòu)造XmlBeanFactory這個(gè)IoC容器時(shí),需要指定BeanDefinition的信息來(lái)源,而這個(gè)信息來(lái)源需要封裝成Spring中的Resource類來(lái)給出。Resource類是Spring用來(lái)封裝I/O操作的類。
IoC容器的初始化過(guò)程
? ? ? IoC的啟動(dòng)包括BeanDefinition的Resource定位、注入和注冊(cè)三個(gè)基本過(guò)程。
第一個(gè)過(guò)程是Resource定位過(guò)程。這個(gè)Resource定位指的是BeanDefinition的資源定位,它由ResourceLoader通過(guò)統(tǒng)一的Resource接口來(lái)完成。
第二個(gè)過(guò)程是BeanDefinition的載入。這個(gè)載入過(guò)程是把用戶定義好的Bean表示成IoC容器內(nèi)部的數(shù)據(jù)結(jié)構(gòu),而這個(gè)容器內(nèi)部的數(shù)據(jù)結(jié)構(gòu)就是BeanDefinition。
第三個(gè)過(guò)程是向IoC容器注冊(cè)這些BeanDefinition的過(guò)程。在IoC容器內(nèi)部將BeanDefinition注入到一個(gè)HashMap中去,IoC容器就是通過(guò)這個(gè)HashMap來(lái)持有這些BeanDefinition數(shù)據(jù)的。
Spring IoC的設(shè)計(jì)中,Bean定義的載入和依賴注入是兩個(gè)獨(dú)立的過(guò)程。依賴注入一般發(fā)生在應(yīng)用第一次通過(guò)getBean向容器索取Bean的時(shí)候。但有個(gè)例外,就像我們向某個(gè)Bean設(shè)置了lazyinit屬性,那么這個(gè)Bean的依賴注入在IoC容器初始化時(shí)就預(yù)先完成了,而不需要等到整個(gè)初始化完成以后,第一次使用getBean時(shí)才會(huì)觸發(fā)。
轉(zhuǎn)載于:https://www.cnblogs.com/yangsy0915/p/5918290.html
總結(jié)
以上是生活随笔為你收集整理的Spring IoC容器总结(未完)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: scanf和gets的差别
- 下一篇: gradle idea java ssm