IOC和DI
1.IOC(Inversion of Control)
背景
- 大多数应用程序都是由两个或是更多的类通过彼此的合作来实现企业逻辑,这使得每个对象都需要获取与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难以维护和调试。
什么叫IOC
- IOC是面向对象编程的一种设计原则(设计思想),可以用来降低计算机代码之间耦合度。
- 系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离。
从使用上看,以前手动new对象,并设置对象中属性的方式,控制权是掌握在应用程序自身。现在则全部转移到了容器,由容器来统一进行管理对象。因为控制权发生了扭转,所以叫控制反转。
控制反转比较形象的解释
- 在没有加入IOC容器之前,如果对象A依赖对象B(就是对对象A某些属性进行实例化的时候,要用到对象B,这就是对象A依赖于对象B),那么对象A初始话到某一个阶段的时候,自己就必须去主动的创建对象B或者使用已经创建的对象B,无论创建还是使用对象B,控制权都在自己手上,也就是应用程序的手上。
- 加入IOC容器之后,对象A和对象B之间就失去了直接的联系,所以当对象A运行到需要B的时候,IOC容器就会主动创建一个对象B注入到对象A需要的地方。
- 因此,通过前后的对比,发现对象A获取对象B由主动行为变成了被动行为,这样控制权反转过来了,就是控制反转
2.DI(依赖注入)
- 所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
实现DI的俩种方法
1.控制权注入;
2.Setter注入;
3.容器作用
- 1.实例化,管理这些对象的生命周期
- 2.主动组织对象与对象之间的关系