IOC,依賴倒置的意思,
所謂依賴多艇,從程序的角度看,就是比如A要調用B的方法像吻,那么A就依賴于B墩蔓,反正A要用到B,則A依賴于B萧豆。
所謂倒置,你必須理解如果不倒置昏名,會怎么著涮雷,因為A必須要有B,才可以調用B轻局,如果不倒置洪鸭,意思就是A主動獲取B的實例:B?b?=?new?B(),這就是最簡單的獲取B實例的方法(當然還有各種設計模式可以幫助你去獲得B的實例仑扑,比如工廠览爵、Locator等等),然后你就可以調用b對象了镇饮。
所以蜓竹,不倒置,意味著A要主動獲取B,才能使用B俱济;到了這里嘶是,你就應該明白了倒置的意思了。倒置就是A要調用B的話蛛碌,A并不需要主動獲取B聂喇,而是由其它人自動將B送上門來。
形象的舉例就是:
通常情況下蔚携,假如你有一天在家里口渴了希太,要喝水,那么你可以到你小區(qū)的小賣部去酝蜒,告訴他們誊辉,你需要一瓶水,然后小賣部給你一瓶水秕硝!
這本來沒有太大問題芥映,關鍵是如果小賣部很遠,那么你必須知道:從你家如何到小賣部远豺;小賣部里是否有你需要的水奈偏;你還要考慮是否開著車去;等等等等躯护,也許有太多的問題要考慮了惊来。也就是說,為了一瓶水棺滞,你還可能需要依賴于車等等這些交通工具或別的工具裁蚁,問題是不是變得復雜了?那么如何解決這個問題呢继准?
解決這個問題的方法很簡單:小賣部提供送貨上門服務枉证,凡是小賣部的會員,你只要告知小賣部你需要什么移必,小賣部將主動把貨物給你送上門來室谚!這樣一來,你只需要做兩件事情崔泵,你就可以活得更加輕松自在:
第一:向小賣部注冊為會員
第二:告訴小賣部你需要什么
是不是和Spring的做法很類似呢秒赤?Spring就是小賣部,你就是A對象憎瘸,水就是B對象
第一:在Spring中聲明一個類:A
第二:告訴Spring入篮,A需要B
假設A是UserAction類,而B是UserService類
在Spring這個商店(工廠)中幌甘,有很多對象/服務:userService,documentService,orgService潮售,也有很多會員:userAction等等痊项,聲明userAction需要userService即可,Spring將通過你給它提供的通道主動把userService送上門來饲做,因此UserAction的代碼示例類似如下所示:
在這段代碼里面线婚,你無需自己創(chuàng)建UserService對象(Spring作為背后無形的手,把UserService對象通過你定義的setUserService()方法把它主動送給了你盆均,這就叫依賴注入H住)
Spring依賴注入的實現(xiàn)技術是:動態(tài)代理
---------------------------------------------------
再說說AOP,即面向切面編程泪姨,面向切面編程的目標就是分離關注點游沿。什么是關注點呢,就是你要做的事肮砾,就是關注點诀黍。假如你是個公子哥,沒啥人生目標仗处,天天就是衣來伸手眯勾,飯來張口,整天只知道玩一件事婆誓!那么吃环,每天你一睜眼,就光想著吃完飯就去玩(你必須要做的事)洋幻,但是在玩之前郁轻,你還需要穿衣服、穿鞋子文留、疊好被子好唯、做飯等等等等事情,這些事情就是你的關注點燥翅,但是你只想吃飯然后玩骑篙,那么怎么辦呢?這些事情通通交給別人去干森书。在你走到飯桌之前替蛉,有一個專門的仆人A幫你穿衣服,仆人B幫你穿鞋子拄氯,仆人C幫你疊好被子,仆人C幫你做飯它浅,然后你就開始吃飯译柏、去玩(這就是你一天的正事),你干完你的正事之后姐霍,回來鄙麦,然后一系列仆人又開始幫你干這個干那個典唇,然后一天就結束了!
AOP的好處就是你只需要干你的正事胯府,其它事情別人幫你干介衔。也許有一天,你想裸奔骂因,不想穿衣服炎咖,那么你把仆人A解雇就是了!也許有一天寒波,出門之前你還想帶點錢乘盼,那么你再雇一個仆人D專門幫你干取錢的活!這就是AOP俄烁。每個人各司其職绸栅,靈活組合,達到一種可配置的页屠、可插拔的程序結構茬底。
從Spring的角度看,AOP最大的用途就在于提供了事務管理的能力攻走。事務管理就是一個關注點蚯斯,你的正事就是去訪問數(shù)據(jù)庫,而你不想管事務(太煩)蟆豫,所以议忽,Spring在你訪問數(shù)據(jù)庫之前,自動幫你開啟事務十减,當你訪問數(shù)據(jù)庫結束之后栈幸,自動幫你提交/回滾事務!