开始好好学习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接口
若是再依赖注入的配置时,配置为穷人的实现,那咱们的代码都不用变,结果就会改变~ 嗯,应该理解了。