您好,登錄后才能下訂單哦!
和MyBatis系列不同的是,在正式開始Spring入門時,我們先來了解兩個關于Spring核心的概念,IoC(Inverse of Control)控制反轉和AOP()面向切面編程。
1.IoC(Inversion of Control)控制反轉
什么是控制反轉呢?可以這么通俗的來解釋,我們通常寫代碼當一個類會關聯另一個類是會直接在這個類里new,例如:
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容器幫我們管理,使得我們不再People代碼中與Eat對象緊耦合。在看下面的代碼:
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 }
Eat類是繼承至Action接口的,這實際上就是通過依賴注入(DI,Dependency Inversion)的方式來實現控制反轉。通過構造方法來注入。不依賴于具體的Action接口實現,我們只需要傳遞一個Action接口類進去即可。相比于之前的“傳統”代碼緊緊的依賴Action的具體實現Eat類,這個代碼實際上解了代碼的耦合性。Spring有兩種構造方式,一種就是我們上面說到的構造器注入,另一種就是set方法注入。所以,IoC的很簡單,目的是解耦,手段是通過依賴注入。Spring容器幫我們解決了一切。
2.AOP(Aspect Oriented Programming)面向切面編程
那什么又是面向切面編程呢?如果你有了解過代理模式,那么就對AOP比較容易理解了,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 }
“單一職責”告訴我們,這樣寫到底好不好呢?日志記錄是People該做的事嗎?難道它不應該只負責插入數據的操作嗎?正確的做法應該是這么的在People類中只有這幾句代碼:
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 }
那我們怎么在insert方法中先記錄日志呢?我們可以用動態代理來實現,即創建一個代理類的對象實例,Spring也已經為我們做好了這件事,僅僅需要配置一下幾句話,即可實現。
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>
事實上我們能實現最開始我們“糟糕”代碼的功能了,而且更優美。在這里我們僅僅對IoC和AOP做一個簡單的了解,在后面會和MyBatis一樣,先學會從第一步配置,再學會怎么用,最后再來了解框架源代碼原理等等。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。