IoC(控制反转)和DI(依赖注入)

来源:互联网 发布:遥控怎么切换网络电视 编辑:程序博客网 时间:2024/06/06 02:12

一、理论


1、IoC是什么

  IoC(Inversion of Control),即“控制反转”,是一种设计思想。

  ●谁控制谁:一般开发,当前对象创建依赖对象,当前对象控制依赖对象;IoC则有一个容器来创建这些对象,由容器来控制对象的创建和使用。

  ●何为反转一般开发,在当前对象中控制依赖对象,这是正;反转则是由容器控制依赖对象。容器创建和注入依赖对象,当前对象只是被动的接受依赖对象。

2、IoC能做什么

  IoC 设计思想能指导我们如何设计出松耦合、更优良的程序。传统应用程序在类内部创建依赖对象,从而导致类与类之间紧耦合;有了IoC容器后,把创建和使用依赖对象的控制权交给了容器,所以对象与对象之间是 松耦合,也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

  主从换位:当前对象处于主导地位,在IoC/DI思想中,当前对象处于从属地位,被动等待容器来创建和注入依赖对象。

  设计思想:好莱坞法则:“别找我们,我们找你”;即由容器帮当前对象找依赖对象并注入,而不是由当前对象主动去找。

3、IoC和DI

  DI(Dependency Injection),即“依赖注入”:即由容器动态的将某个依赖组件注入到当前组件中依赖注入提升了组件重用的方便性、灵活性、可扩展性。通过依赖注入机制,我们只要简单的配置,无需修改任何代码就可以完成新的业务逻辑,而不需要关心所需组件来自何处,由谁实现。

  ●谁依赖谁组件依赖容器

  ●为什么需要依赖:组件需要容器来提供所需的其他组件

  ●谁注入谁容器把一个组件注入另一个组件


  IoC和DI什么关系呢?其实它们是同一个概念的不同描述 

  IoC是在系统运行中,动态的向某个对象提供它所需要的其他对象。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,需要一个Connection对象,至于这个Connection对象怎么创建,何时创建,A不需要知道。spring会在适当的时候创建一个Connection对象,注入到A当中。

      A需要依赖 Connection对象才能正常运行,而这个Connection对象是由spring注入到A中的,DI(依赖注入)的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后的反射(reflection),它允许程序在运行的时候动态的创建对象、执行方法、改变对象的属性,spring就是通过反射来实现注入的。


二、总结

  一般开发中,我们要实现某一个功能,需要多个对象来完成,要使用new Object() 将合作对象创建出来,当前对象需要哪个合作对象,就去创建所需对象。

     使用了Spring作为容器后,创建合作对象的工作是由容器来做的,容器创建好对象,存储到容器里面,需要时从容器里取出对象,交给使用者使用。

  IoC(控制反转)对象控制权的转移。以前创建对象的主动权和创建时机是由组件控制的,而现在这种权力转移到容器,容器就是用来创建对象的工厂。

  DI(依赖注入)其实就是IoC的另外一种说法

原创粉丝点击