javascript
小马哥spring编程核心思想_Spring核心思想理解
前言
在拉勾教育Java高薪訓練營再次學習了spring,再次感嘆spring的核心思想。強調一下,IOC和AOP是一個技術思想(理論),并不是spring提出的,spring在技術層次把這兩個思想做了?常好的實現(Java)。正是spring的優秀使得java繁榮起來,輕量,低耦合,簡單,易擴展等。
什么是IOC
Inversion of Control (控制反轉/反轉控制),指的是關于對象的創建和管理的控制權反轉了!
- 傳統開發方式:自己在一個類中通過new得到另外一個類的實例對象
- IOC思想:由外部環境實例化放到容器中(spring框架、IOC容器)
那么控制反轉有什么好處呢?
解耦:與接口編程同時使用時,依賴別人者不會因被依賴者改變而改變,達到了高度的松耦合
什么是AOP
OOP概念:面向對象程序設計(Object Oriented Programming)
AOP概念:?向切?編程( Aspect oriented Programming )
AOP是OOP的延續,從OOP說起,OOP是利用繼承和多態來實現代碼的復用,是一種垂直的復用。那么如果需要在每個方法中都需要加入前置和后置處理,比如事務管理,日志,權限等通用的代碼該如何復用呢?即使是抽取了公共方法,仍然需要在每個方法的前后增加重復代碼。也就是說要實現原有方法業務內容不變,前后進行增強的模式,也就是代理模式。
于是橫向方法重復邏輯代碼被抽取,并且使得增加的邏輯和業務邏輯解耦。代理模式真的是好強大,使得你在寫邏輯代碼和調用的時候沒有感知到我對其做了統一的增強。它是它,但它已經不是它了。。。
那AOP就是使用了動態代理模式來實現的。其中如果有實現接口就使用jdk動態代理,如果沒有實現接口就使用cglib動態代理,這樣說可能有些繞,實際上的這里理解實現接口是implements這個java關鍵字,這樣結合代碼就更容易理解了。
動態代理梳理
spring的aop動態代理有jdk和cglib兩種實現方式,那么他們之間的區別是什么呢。首先我們應該來看如何實現代理。
我們如何實現代理
代理就是對原有方法進行增強,即改變方法的內容實現,那么如何改變原有方法?在java里可以通過重寫Override來實現,那么有幾種重寫的思路:
- 接口:原有方法實現了接口,我也寫一個類實現接口,方法重寫,在內容中回調原有方法,并在回調前后進行增強。
- 繼承:父類實現了方法,我編寫一個子類重寫父類的方法,同樣在內容中回調原有方法(保證原有業務邏輯不變),并在回調前后進行增強。
也就是說可以有接口,也可以沒有接口,這就是jdk動態代理和cglib動態代理的區別,就是動態代理的兩種實現方案,當然還有其他的動態代理實現方案,其實現無非還是對原有方法的重寫(只不過重寫的時機方案不同),將重寫部分在代理類中實現,當使用時返回的其實是代理類,就可以無感知的對所有方法進行橫向增強,解決增強邏輯和業務實現的耦合問題。不得不說,代理模式真的是太強大了,在各個框架中,比如mybatis和spring均使用了動態代理和反射機制從而達到通用的實現。
總結
以上是生活随笔為你收集整理的小马哥spring编程核心思想_Spring核心思想理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dataframe在特定列 插入_从插入
- 下一篇: python用pip安装_使用pip安装