目录
IoC 和 SpringIoC
IoC是控制反转的意思,它意味着控制权(依赖对象)的反转,将控制权进行反转,它是一种思想.
举个例子,理解一下什么是控制反转
现在有三个对象A,B,C. A的创建依赖于B,B的创建依赖于C,当我们想要创建A的时候创建B,同理也要创建C.此时如果最底层也就是这里的C发生变化,那么整个调用链A和B都需要发生改变,耦合性比较高.在这种创建方式下,A拥有B和C对象创建的控制权(A中创建了B,B中创建了C).A创建 B和C对象就需要被创建,A销毁 B和C对象就需要被销毁.
如果我们使用IoC的思想,同样是三个对象A,B,C. A的创建依赖于B,B的创建依赖于C. 当我们创建A的时候不再创建B了,而是通过注入的方式,也就是传递的方式.把B当作一个参数传递给A.A在创建的时候通过传递得到B,或者通过在框架中取得到B.同理在B中,不再创建C.这样耦合性就比较低.在这种创建方式下,A就把B和C对象的控制权转移了,A创建,B和C不再需要跟着创建,A销毁B和C对象不再跟着销毁.此时的创建顺序就是 C,B,A了.
SpringIoC就是把控制权反转给Spring容器,不再是上级对象创建并控制下级对象了,而是下级对象注入到上级对象中,下级的控制权不再由上级类控制,即使下级类发生任何改变,当前类不受影响.控制权由上级对象反转为Spring容器
DI
DI就是依赖注入的意思,它是一种方法一种技术.在IoC运行期间,动态地将某种依赖关系注入当对象中.
依赖注入:将依赖的某个对象注入到当前类当中的这个行为就叫做依赖注入
同样还是上面的例子,A在创建的时候需要依赖B,我们需要把B传入到当前对象A中(把B从一个地方(Spring容器中),取出拿到A中),这个过程就叫做依赖注入.
IoC和DI说的是从不同的角度描述同一件事,IoC是一种思想,DI是实现这种思想的方法.
例如:IoC的思想是不希望上级对象创建控制下级对象,下级的控制权不再由上级类控制.DI就是通过IoC容器,使用下级对象注入当上级对象中的这种方法实现IoC的思想的.
Spring
Spring是现在非常流行的开源框架.简单理解就是:Spring是包含了众多工具方法的IoC容器,包含了俩个基础操作:将Bean(对象)存储到Spring容器中.从Spring容器中取出Bean(对象).
它可以解耦(下级的控制权不再由上级控制,下级发生任何改变当前类不受影响)
使用更加方便(不需要手动创建和关注对象背后的依赖关系如循环依赖等)
提高效率(单例模式下对象只创建一次.不需要重复创建.需要存储的Spring对象会随着框架的启动而启动,需要调用时不需要重新调用了,直接拿Spring容器里创建好的,提高了效率)