中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

佳木斯市| 项城市| 乌审旗| 察雅县| 天水市| 福清市| 金坛市| 大城县| 南溪县| 建德市| 镶黄旗| 桂东县| 板桥市| 建始县| 邢台县| 屯昌县| 辉南县| 和平县| 庄浪县| 巴彦县| 恩施市| 丽江市| 萨嘎县| 读书| 锡林郭勒盟| 鄄城县| 社会| 荥阳市| 海宁市| 齐齐哈尔市| 高青县| 虎林市| 辽宁省| 石景山区| 那曲县| 青神县| 永顺县| 崇义县| 绥中县| 中西区| 孝昌县|