定义:Spring是包含了众多工具方法的IoC容器;(Spring Framework)
IoC(Inversion of Control),控制反转,Spring是一个“控制反转”的容器;
比如构建一个车类:车car-——车架framework——底盘bottom——轮毂tire
一般情况下,我们会先构建Tire类,然后构建Bottom类,当Bottom中需要Tire时,在Bottom构造方法中new Tire,并初始化,同样的在构造车架类和车类;
在以上程序中,汽车的样式固定的,可以说,当我们需要一个轮子大小为15,颜色为红色的汽车时,轮子的大小我们可以直接改成15,但是颜色为红色,我们似乎无法直接修改,我们需要在Tire类中添加颜色变量,并且因为是在Bottom中new Tire的,此间的关系是强耦合的,也就是Bottom类是控制着Tire类的,就需要对Bottom代码进行必要的修改,同理,Framework,Car的代码都需要修改,这里还好,但是一般的业务代码比这关系复杂的多,若是客户不断的修改需求,那所有的代码都要跟着修改,实在是麻烦很多,此时IoC控制反转的思想就显得尤为重要;
我们可以尝试不在每个类中自己创建下级类,如果自己创建下级类就会出现当下级类发生改变操作,自己也要跟着修改。此时,我们只需要将原来由自己创建的下级类,改为传递的方式(也就是注入的方式),因为我们不需要在当前类中创建下级类了,所以下级类即使发生变化(创建或减少参数),当前类本身也无需修改任何代码,这样就完成了程序的解耦。
通过以上调整,采用注入的方式,无论底层类如何变化,整个调⽤链是不⽤做任何改变的,这样就完成了代码之间的解耦,使程序之间更加通用;
这样再回头看Spring的定义,是一个IoC容器,则具备最重要的两个功能:存对象,取对象;对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存 储对象和获取对象的能⼒。
DI: Dependency Injection,所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依 赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容 器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
IoC 是“目标”也是⼀种思想,而目标和思想只是⼀种指导原则,最终还是要有可行的落地方案,而 DI 就属于具体的实现