學(xué)習(xí)IOC

1:IOC

IOC作為Spring容器的核心智绸。成功完成了對(duì)象依賴關(guān)系的管理權(quán)的反轉(zhuǎn)窝稿。

在起初的開發(fā)過程中:許多應(yīng)用都是多個(gè)類通過彼此的合作來實(shí)現(xiàn)業(yè)務(wù)邏輯的楣富,這使得每個(gè)對(duì)象都需要與其合作的對(duì)象的引用,如果這個(gè)獲取過程由對(duì)象自己來完成伴榔,那么將導(dǎo)致代碼的高度耦合和難以測(cè)試纹蝴。

依賴反轉(zhuǎn)是依賴對(duì)象的獲取被反轉(zhuǎn)。這種對(duì)象之間的依賴關(guān)系注入交給了框架和IOC容器來管理踪少。

Spring通過定義了BeanDefinition這種核心的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)依賴反轉(zhuǎn)功能的塘安。

BeanDefinition是用來管理基于Spring的應(yīng)用中的各種對(duì)象以及他們之間的相互關(guān)系。

1.1 IOC容器初始化過程

ioc容器的初始化是由refresh()方法的啟動(dòng)來開始的援奢。整個(gè)工程主要分為三大步兼犯。

1:加載配置文件。其實(shí)就是Resource的定位過程集漾。

這一步主要是由ResourceLoader通過Resource接口來完成的切黔。就是去尋找各種相關(guān)的配置文件。

2:BeanDefinition的載入

以XML為例子具篇。找到xml配置文件后纬霞,調(diào)用對(duì)應(yīng)的解析器,讀取配置文件驱显。生成BeanDefinition诗芜。

整個(gè)BeanDefinition其實(shí)就是Bean對(duì)象在IOC容器里面的一種抽象侨舆,<bean></bean>為一個(gè)BeanDefinition。

這個(gè)BeanDefinition的載入又可以分為2步

a:通過調(diào)用對(duì)應(yīng)的XML解析器解析成為document對(duì)象

b:調(diào)用Spring的Bean規(guī)則進(jìn)行解析

例如:init-method绢陌,class factory-method,scope等屬性等等解析成為了一個(gè)BeanDefinition數(shù)據(jù)類型熔恢。整個(gè)過程可以看成是一個(gè)反射獲取數(shù)據(jù)的過程脐湾。

3:將解析生成好的BeanDefinition注冊(cè)到IOC容器上。

這個(gè)過程最為重要叙淌,這個(gè)過程是通過調(diào)用BeanDefinitionRegistry接口來實(shí)現(xiàn)的秤掌。通過分析,在IOC容器內(nèi)部將BeanDefinition注入到了一個(gè)hashMap中鹰霍,IOC容器就是通過整個(gè)HashMap來持有這些BeanDefinition數(shù)據(jù)的闻鉴。

DefaultListableBeanFactory

private final MapbeanDefinitionMap = new ConcurrentHashMap(256);

把Bean的名字。beanName作為一個(gè)key茂洒,BeanDefinition作為一個(gè)value放到整個(gè)IOC容器所持有的Map中孟岛。

需要注意的是,現(xiàn)在還是在IOC容器初始化的階段督勺。還沒有包含Bean依賴注入的實(shí)現(xiàn)渠羞,在Spring的設(shè)計(jì)中,Bean定義的載入和依賴注入是兩個(gè)獨(dú)立的過程智哀。依賴注入一般是應(yīng)用在第一次通過·getBean向容器索取Bean的時(shí)候次询。也有一個(gè)例外。就是可以配置lazy-init屬性來完成對(duì)Bean的實(shí)例化瓷叫。

1.2 IOC容器的依賴注入

依賴注入的起點(diǎn)就是getBean方法屯吊。之后會(huì)調(diào)用createBean方法。這個(gè)createBean不僅是根據(jù)整個(gè)BeanDefinition定義的要求來生成摹菠,同時(shí)還對(duì)Bean的初始化進(jìn)行了處理盒卸。整個(gè)過程通過遞歸調(diào)用一層層來完成bean的創(chuàng)建和注入。這個(gè)注入主要有兩種辨嗽,一種是setter注入世落,通過反射來實(shí)現(xiàn)的,一種是構(gòu)造器注入糟需。

在整個(gè)Bean的創(chuàng)建和依賴注入完成之后屉佳,這個(gè)bean就不在是簡(jiǎn)單的java對(duì)象了,它還包含了對(duì)象之間的依賴關(guān)系洲押。下面我們就開始使用武花。

2 ApplicationContext和Bean的初始化以及銷毀

在Spring中,有兩類容器杈帐,一種是實(shí)現(xiàn)了BeanFactory的簡(jiǎn)單容器系列体箕。這個(gè)系列只實(shí)現(xiàn)了容器最基本的功能专钉。另外一種是ApplicationContext應(yīng)用上下文,它作為容器的高級(jí)形態(tài)存在累铅,在簡(jiǎn)單容器的基礎(chǔ)上跃须,增加了許多面向框架的特性。


.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娃兽,一起剝皮案震驚了整個(gè)濱河市菇民,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌投储,老刑警劉巖第练,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異玛荞,居然都是意外死亡娇掏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門勋眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婴梧,“玉大人,你說我怎么就攤上這事凡恍≈就海” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嚼酝,是天一觀的道長(zhǎng)浮还。 經(jīng)常有香客問我,道長(zhǎng)闽巩,這世上最難降的妖魔是什么钧舌? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涎跨,結(jié)果婚禮上洼冻,老公的妹妹穿的比我還像新娘。我一直安慰自己隅很,他們只是感情好撞牢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叔营,像睡著了一般屋彪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绒尊,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天畜挥,我揣著相機(jī)與錄音,去河邊找鬼婴谱。 笑死蟹但,一個(gè)胖子當(dāng)著我的面吹牛躯泰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播华糖,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼麦向,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了客叉?” 一聲冷哼從身側(cè)響起磕蛇,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎十办,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體超棺,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡向族,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棠绘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件相。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氧苍,靈堂內(nèi)的尸體忽然破棺而出夜矗,到底是詐尸還是另有隱情,我是刑警寧澤让虐,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布紊撕,位于F島的核電站,受9級(jí)特大地震影響赡突,放射性物質(zhì)發(fā)生泄漏对扶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一惭缰、第九天 我趴在偏房一處隱蔽的房頂上張望浪南。 院中可真熱鬧,春花似錦漱受、人聲如沸络凿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)絮记。三九已至,卻和暖如春紧憾,著一層夾襖步出監(jiān)牢的瞬間到千,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工赴穗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憔四,地道東北人膀息。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像了赵,于是被迫代替她去往敵國(guó)和親潜支。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355