Java輕量級業(yè)務(wù)層框架Spring兩大核心IOC和AOP原理

IoC(Inversion of Control):

(1)IoC(Inversion of Control)是指容器控制程序?qū)ο笾g的關(guān)系臀规,而不是傳統(tǒng)實現(xiàn)中,由程序代碼直接操控栅隐∷遥控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移是所謂反轉(zhuǎn)约啊。對于Spring而言邑遏,就是由Spring來控制對象的生命周期和對象之間的關(guān)系;IoC還有另外一個名字——“依賴注入(Dependency Injection)”恰矩。從名字上理解记盒,所謂依賴注入,即組件之間的依賴關(guān)系由容器在運行期決定外傅,即由容器動態(tài)地將某種依賴關(guān)系注入到組件之中纪吮。

(2)在Spring的工作方式中,所有的類都會在spring容器中登記萎胰,告訴spring這是個什么東西碾盟,你需要什么東西,然后spring會在系統(tǒng)運行到適當(dāng)?shù)臅r候技竟,把你要的東西主動給你冰肴,同時也把你交給其他需要你的東西。所有的類的創(chuàng)建榔组、銷毀都由 spring來控制熙尉,也就是說控制對象生存周期的不再是引用它的對象,而是spring搓扯。對于某個具體的對象而言检痰,以前是它控制其他對象,現(xiàn)在是所有對象都被spring控制锨推,所以這叫控制反轉(zhuǎn)铅歼。

(3)在系統(tǒng)運行中,動態(tài)的向某個對象提供它所需要的其他對象换可。

(4)依賴注入的思想是通過反射機(jī)制實現(xiàn)的椎椰,在實例化一個類時,它通過反射調(diào)用類中set方法將事先保存在HashMap中的類屬性注入到類中沾鳄。

總而言之俭识,在傳統(tǒng)的對象創(chuàng)建方式中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例洞渔,而在Spring中創(chuàng)建被調(diào)用者的工作由Spring來完成套媚,然后注入調(diào)用者,即所謂的依賴注入or控制反轉(zhuǎn)磁椒。

注入方式有兩種:依賴注入和設(shè)置注入堤瘤;

IoC的優(yōu)點:降低了組件之間的耦合,降低了業(yè)務(wù)對象之間替換的復(fù)雜性浆熔,使之能夠靈活的管理對象本辐。

AOP(Aspect Oriented Programming):

(1)AOP面向方面編程基于IoC,是對OOP的有益補(bǔ)充医增;

(2)AOP利用一種稱為“橫切”的技術(shù)慎皱,剖解開封裝的對象內(nèi)部,并將那些影響了多個類的公共行為封裝到一個可重用模塊叶骨,并將其名為“Aspect”茫多,即方面。所謂“方面”忽刽,簡單地說天揖,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來跪帝,比如日志記錄今膊,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度伞剑,并有利于未來的可操作性和可維護(hù)性斑唬。

(3)AOP代表的是一個橫向的關(guān)系,將“對象”比作一個空心的圓柱體黎泣,其中封裝的是對象的屬性和行為恕刘;則面向方面編程的方法,就是將這個圓柱體以切面形式剖開聘裁,選擇性的提供業(yè)務(wù)邏輯雪营。而剖開的切面,也就是所謂的“方面”了衡便。然后它又以巧奪天功的妙手將這些剖開的切面復(fù)原献起,不留痕跡,但完成了效果镣陕。

(4)實現(xiàn)AOP的技術(shù)谴餐,主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式呆抑,對該消息進(jìn)行裝飾岂嗓,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式鹊碍,引入特定的語法創(chuàng)建“方面”厌殉,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼食绿。

(5)Spring實現(xiàn)AOP:JDK動態(tài)代理和CGLIB代理

JDK動態(tài)代理:其代理對象必須是某個接口的實現(xiàn),它是通過在運行期間創(chuàng)建一個接口的實現(xiàn)類來完成對目標(biāo)對象的代理公罕;其核心的兩個類是InvocationHandler和Proxy器紧。

CGLIB代理:實現(xiàn)原理類似于JDK動態(tài)代理,只是它在運行期間生成的代理對象是針對目標(biāo)類擴(kuò)展的子類楼眷。CGLIB是高效的代碼生成包铲汪,底層是依靠ASM(開源的java字節(jié)碼編輯類庫)操作字節(jié)碼實現(xiàn)的,性能比JDK強(qiáng)罐柳;需要引入包asm.jar和cglib.jar掌腰。

使用AspectJ注入式切面和@AspectJ注解驅(qū)動的切面實際上底層也是通過動態(tài)代理實現(xiàn)的。

(6)AOP使用場景:

Authentication 權(quán)限檢查

Caching 緩存

Context passing 內(nèi)容傳遞

Error handling 錯誤處理

Lazy loading 延遲加載

Debugging  調(diào)試

logging, tracing, profiling and monitoring 日志記錄张吉,跟蹤齿梁,優(yōu)化,校準(zhǔn)

Performance optimization 性能優(yōu)化芦拿,效率檢查

Persistence  持久化

Resource pooling 資源池

Synchronization 同步

Transactions 事務(wù)管理

另外Filter的實現(xiàn)和struts2的攔截器的實現(xiàn)都是AOP思想的體現(xiàn)士飒。

總結(jié):

(1)spring有以下的優(yōu)點:

1.降低了組件之間的耦合性 ,實現(xiàn)了軟件各層之間的解耦

2.可以使用容易提供的眾多服務(wù)蔗崎,如事務(wù)管理酵幕,消息服務(wù)等

3.容器提供單例模式支持

4.容器提供了AOP技術(shù),利用它很容易實現(xiàn)如權(quán)限攔截缓苛,運行期監(jiān)控等功能

5.容器提供了眾多的輔助類芳撒,能加快應(yīng)用的開發(fā)

6.spring對于主流的應(yīng)用框架提供了集成支持,如hibernate未桥,JPA笔刹,Struts等

7.spring屬于低侵入式設(shè)計,代碼的污染極低

8.獨立于各種應(yīng)用服務(wù)器

9.spring的DI機(jī)制降低了業(yè)務(wù)對象替換的復(fù)雜性

10.Spring的高度開放性冬耿,并不強(qiáng)制應(yīng)用完全依賴于Spring舌菜,開發(fā)者可以自由選擇spring的部分或全部

(2)AOP可以動態(tài)的添加或者刪除在切面上的邏輯而不影響原來代碼的執(zhí)行,體現(xiàn)了源代碼無關(guān)性亦镶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末日月,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缤骨,更是在濱河造成了極大的恐慌爱咬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绊起,死亡現(xiàn)場離奇詭異精拟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蜂绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅表,“玉大人,你說我怎么就攤上這事荡碾〗鞫粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵坛吁,是天一觀的道長。 經(jīng)常有香客問我铐尚,道長拨脉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任宣增,我火速辦了婚禮玫膀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爹脾。我一直安慰自己帖旨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布灵妨。 她就那樣靜靜地躺著解阅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泌霍。 梳的紋絲不亂的頭發(fā)上货抄,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音朱转,去河邊找鬼蟹地。 笑死,一個胖子當(dāng)著我的面吹牛藤为,可吹牛的內(nèi)容都是我干的怪与。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缅疟,長吁一口氣:“原來是場噩夢啊……” “哼分别!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窿吩,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茎杂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纫雁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煌往,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刽脖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞海。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖曲管,靈堂內(nèi)的尸體忽然破棺而出却邓,到底是詐尸還是另有隱情,我是刑警寧澤院水,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布腊徙,位于F島的核電站,受9級特大地震影響檬某,放射性物質(zhì)發(fā)生泄漏撬腾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一恢恼、第九天 我趴在偏房一處隱蔽的房頂上張望民傻。 院中可真熱鬧,春花似錦场斑、人聲如沸漓踢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喧半。三九已至,卻和暖如春锁保,著一層夾襖步出監(jiān)牢的瞬間薯酝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工爽柒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留吴菠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓浩村,卻偏偏與公主長得像做葵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子心墅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容