轉載地址:https://zhidao.baidu.com/question/305818574.html
我來說說我的理解:
面試的時候,盡量不要照本宣科,這樣給面試官的印象是很差的。用自己的話理解是最好的。我先來將兩個例子:
面試的時候,盡量不要照本宣科,這樣給面試官的印象是很差的。用自己的話理解是最好的。我先來將兩個例子:
ioc, 控制反轉,這個指的就是我們獲取對象的方式進行反轉了,改變了。在使用spring之前是需要手動new出來的,是我們主動獲取的。使用spring之后,是將這個獲取的過程交給spring來管理,我們只需要告訴spring你需要什么就行了,它就會把東西給你。比如:在沒有電商的時候,我們去上街買東西,需要考慮到這東西有沒有,價錢多少,怎么搬回來,去有多遠……等等無數個和主要的業務邏輯(買東西)無關的問題。這樣就會擾亂主業務邏輯。當我們有了電商平台后,買東西時只需要兩步。注冊賬號(裝載bean),告訴電商你要的東西名字(通過名字獲取Bean),然后就可以在門口收到東西了。這就是ioc。
aop,面向切面。在談這個之前需要了解幾個詞:切面,切入點,織入,目標對象,通知。
我先解釋下名字的意思,再講故事。
切面:就是你要准備增強的那些方法。
切入點:就是具體織入的方法,定義了地點
織入:動詞,就是將切面織入的過層
目標對象:被增強的類
通知:就是什么時候增強,定義了時間
好了,了解清楚上面的幾個詞的意思后,再聽故事就容易多了。
aop的功能就是用來增強,在執行主業務的通知也順帶執行其他業務。如:老李上街辦點事兒,走啊走,走到了老王家門前(切入點),老王看見老李問:去哪啊!
老李:上街辦點事兒(目標類)
老王:那幫我順便把這封信投到郵筒里吧。(切面),等到10點的時候郵局開門了去櫃台投。(通知)
老李:好嘞。然后老李接過信。(織入)
老李繼續走啊走,繼續上街辦事(增強后的目標類)。辦完事后老李回家了。
以上就是aop。aop一般用來處理權限控制,日志記錄,加載事務等非主要業務邏輯的事情。底層是采用cglib和jdk的動態代理實現的。
以上例子可能會有點不恰當,如有大神,望指點修正,謝謝!