開始好好學習java基礎和思想~java
控制反轉(IOC)是Spring框架的核心思想,用我本身的話說,就是你要作一件事,別本身可勁new了,你就說你要幹啥,而後外包出去就好~
依賴注入(DI) 在我淺薄的想法中,就是經過接口的引用和構造方法的表達,將一些事情整好了反過來傳給須要用到的地方~
這樣作得好處:作到了單一職責,而且提升了複用性,解耦了以後,任你如何實現,使用接口的引用調用的方法,永遠不須要改變框架
舉一個栗子:ide
寫個接口,說我們購物去~學習
public interface IShopping { void drive(); String Money(); }
在實現它兩下:有錢人購物,沒錢人購物 - -!這栗子舉的測試
public class RichMan implements IShopping{ @Override public void drive() { System.out.println("Drive By Benz"); } @Override public String Money() { System.out.println("lot`s of money"); return "10000"; } }
public class PoorGuy implements IShopping{ @Override public void drive() { System.out.println("take a walk!"); } @Override public String Money() { System.out.println("nothing"); return "1"; } }
而後咱們出去玩,順便shopping一下吧~this
public class Play { private IShopping shoppingSomething;
//使用構造方法,將實現傳入 public Play(IShopping shoppingSomething){ this.shoppingSomething = shoppingSomething; } public void withgirlFriend(){ shoppingSomething.drive(); shoppingSomething.Money(); }
}
將想用的實現方式,用容器注入進來,這裏就模擬下下怎麼注入:spa
public class Containner { public Play getShopping(){ return new Play(new RichMan()); } }
測試一下:code
public static void main(String[] args) { Containner containner = new Containner(); Play play = containner.getShopping(); play.withgirlFriend(); }
結果是:blog
Drive By Benz
lot`s of money接口
若是再依賴注入的配置時,配置爲窮人的實現,那咱們的代碼都不用變,結果就會改變~ 嗯,應該理解了。