经常听到“控制翻转”和“依赖注入”这两个词,所以特意去了解了一下。

  “在Spring中,控制翻转(Inversion of Control,IoC)是通过依赖注入(Dependency injection,DI)实现的。所谓依赖注入指的是,由Spring容器来负责对象的创建以及维护对象之间的依赖关系,对象不需要负责创建和解决自己的依赖。”这是我了解到的内容。

  下面谈谈我的理解:

  “厨子”、“采购员”、“原材料”、“菜”,看到这几个词的时候我们会想到什么呢?

  1、“厨子炒菜需要原材料”

  2、“采购员负责采购原材料”

  大家都知道分工细化能够带来效率的提升,厨子专注于做菜往往能做出好吃的菜,采购员专注于采购往往能买到物美价廉的材料。

 

  假设有类A、类B:

1 public class A{
2     ...
3     ...    
4     pubilc A(){
5     }
6     public A(...){
7          ...
8     }
9 }
 1  public class B{
 2      A a;
 3      ...
 4      ...    
 5      pubilc B(){
 6      }
 7      public B(...){
 8           ...
 9           this.a = new A(...);
10      }
11  }

  在不使用依赖注入的情况下,B类需要自己动手去创建一个类A的对象来满足自己的需求,在这种情况下,类B和类A是紧耦合的,如果需要对类A进行修改,那么所有依赖类A的类都需要做相应的调整,如果依赖类A的类比较多的话,这就比较麻烦了。为了解决这种紧耦合带来的不便,就有了依赖注入。

  依赖注入的主要目的就是为了解耦,在程序开始运行后,Spring IoC容器会先创建一些类,就像采购员会先去采购一批原材料,当然了具体需要创建哪些类,需要我们告诉容器,就像具体要买哪些菜需要厨子告诉采购员,然后所有依赖于这些类的类自需要告诉容器:“我需要一个XXX类的对象”,然后然就会得到一个XXX类的对象,就像厨子想炒白菜,只需要说:“我需要白菜、盐...”,然后他就能得到想要的材料并开始炒菜。