91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring入門導讀——IoC和AOP

發布時間:2020-07-13 07:12:33 來源:網絡 閱讀:320 作者:zsdnr 欄目:網絡安全

和MyBatis系列不同的是,在正式開始Spring入門時,我們先來了解兩個關于Spring核心的概念,IoC(Inverse of Control)控制反轉和AOP()面向切面編程。

1.IoC(Inversion of Control)控制反轉

什么是控制反轉呢?可以這么通俗的來解釋,我們通常寫代碼當一個類會關聯另一個類是會直接在這個類里new,例如:

Spring入門導讀——IoC和AOP

 1 package day_30_spring; 2  3 /** 4  * @author 余林豐 5  * 6  * 2016年10月30日 7  */ 8 public class People { 9     private Eat eat;10     11     /**12      * 在構造方法中創建Eat的對象實例13      */14     public People(){15         eat = new Eat();16     }17     18 }

Spring入門導讀——IoC和AOP

現在我們將對象的控制權“反轉”,交由第三方容器進行管理,即交由Spring容器幫我們管理,使得我們不再People代碼中與Eat對象緊耦合。在看下面的代碼:

Spring入門導讀——IoC和AOP

 1 package day_30_spring; 2  3 /** 4  * @author 余林豐 5  * 6  * 2016年10月30日 7  */ 8 public class People { 9     private Action eat;10     11     /**12      * 在構造方法中創建Eat的對象實例13      */14     public People(Action eat){15         this.eat = eat;16     }17     18 }

Spring入門導讀——IoC和AOP

Eat類是繼承至Action接口的,這實際上就是通過依賴注入(DI,Dependency Inversion)的方式來實現控制反轉。通過構造方法來注入。不依賴于具體的Action接口實現,我們只需要傳遞一個Action接口類進去即可。相比于之前的“傳統”代碼緊緊的依賴Action的具體實現Eat類,這個代碼實際上解了代碼的耦合性。Spring有兩種構造方式,一種就是我們上面說到的構造器注入,另一種就是set方法注入。所以,IoC的很簡單,目的是解耦,手段是通過依賴注入。Spring容器幫我們解決了一切。

2.AOP(Aspect Oriented Programming)面向切面編程

那什么又是面向切面編程呢?如果你有了解過代理模式,那么就對AOP比較容易理解了,AOP的原理實際上也是通過動態代理的方式實現的。我們來看下面這個例子:對數據庫的操作前會有日志記錄,對數據庫的操作完后也會有日志記錄,“通常”我們可能會這么寫。

Spring入門導讀——IoC和AOP

 1 package day_30_spring; 2  3 /** 4  * @author 余林豐 5  * 6  * 2016年10月30日 7  */ 8 public class People { 9     private Logger logger = new Logger();10     11     public void insert(int i){12         logger.beforeInsert();    //插入前的日志記錄13         //此處插入一條數據14         logger.afterInsert();    //插入后的日志記錄15     }16 }

Spring入門導讀——IoC和AOP

“單一職責”告訴我們,這樣寫到底好不好呢?日志記錄是People該做的事嗎?難道它不應該只負責插入數據的操作嗎?正確的做法應該是這么的在People類中只有這幾句代碼:

Spring入門導讀——IoC和AOP

 1 package day_30_spring; 2  3 /** 4  * @author 余林豐 5  * 6  * 2016年10月30日 7  */ 8 public class People { 9     10     public void insert(int i){11         //此處插入一條數據12     }13 }

Spring入門導讀——IoC和AOP

那我們怎么在insert方法中先記錄日志呢?我們可以用動態代理來實現,即創建一個代理類的對象實例,Spring也已經為我們做好了這件事,僅僅需要配置一下幾句話,即可實現。

Spring入門導讀——IoC和AOP

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans> 3     <!-- 省略其他配置,只配置aop --> 4     <aop:config> 5         <aop:aspect ref="logger"> 6             <aop:pointcut id="insert" expression="execution(* *.insert(..))"/> 7             <aop:befor point-ref="insert" method="beforeInsert"/> 8             <aop:after point-ref="insert" method="afterInsert"/> 9         </aop:aspect>10     </aop:config>11 </beans>

Spring入門導讀——IoC和AOP

事實上我們能實現最開始我們“糟糕”代碼的功能了,而且更優美。在這里我們僅僅對IoC和AOP做一個簡單的了解,在后面會和MyBatis一樣,先學會從第一步配置,再學會怎么用,最后再來了解框架源代碼原理等等。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 石楼县| 朝阳市| 繁峙县| 洱源县| 南京市| 武城县| 汕尾市| 田阳县| 峡江县| 偏关县| 黔南| 印江| 昭通市| 中方县| 锦州市| 罗江县| 松阳县| 彝良县| 山阴县| 江北区| 榆中县| 洛扎县| 奈曼旗| 长春市| 义马市| 咸丰县| 岑巩县| 田阳县| 怀宁县| 颍上县| 张家港市| 林甸县| 长乐市| 黑山县| 乌兰察布市| 高雄市| 仲巴县| 弋阳县| SHOW| 南岸区|