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

来源:互联网 发布:酒店淡季网络促销活动 编辑:程序博客网 时间:2024/06/10 07:16

依赖注入是用于实现控制反转的最常见的方式之一。

依赖注入的思想是:当一个类对另一个类有依赖时,不在该类内部对依赖的类进行实例化,而是有一个配置好了的bean.xml文件,告诉容器所依赖的类,在实例化该类时,容器自动注入一个依赖的类的实例。

        例如:我要用电脑看视频,就需要用到电脑的ShowVideo方法。有两个类,一个是我,一个是电脑,

           传统的方法就是在类中先实例化依赖的类,然后再调用该类中的方法。

public class  Me{

    public static void Play(){
    Computer computer=new Computer();
    computer.ShowVideo();
    }


}

引入依赖注入的思想之后,就不用在Me类中实例化Computer类,代码就可以改变成如下的样子

public Interface ComputerInterface{   //定义了一个电脑的接口
public void ShowVideo();     //声明看视频的方法
}


public class Me{
private ComputerInterface computerInterface;
public static void Play(){
this.computerInterface.ShowVideo();
}
public void setComputerInterface(ComputerInterface computerInterface){
this.computerInterface=computerInterface;
}

}

接下来在bean.xml文件中配置一下依赖关系

<bean id="me"   class="Me">

  <property name="computerInterface">

     <ref local="computerInterface"/>

     </property>

</bean>

<bean id="computerInterface"   class="Computer">


这样,在“我”使用电脑看视频时,并不知道电脑这个类的存在,只知道调用了一个接口ComputerInterface,而ComputerInterface的实现由Computer这个类来实现,并且使用时有容器自动注入,这样就降低了容器之间的相互依赖。


总结一下依赖注入的优点:

1,我们可以将spring IOC理解成一个仓库,放着各种bean的实例,需要的时候直接从仓库拿,不需要重新建立一份,实现了代码的单例模式。

2,如果直接new实例化的时候,需要有new实体类,如果累有变动,一个一个的改比较麻烦,利用了spring ioc之后直接修改一个xml文件即可。

3.提高了系统的耦合性。


IOC:控制反转。

通俗的解释例如,我们找对象,可以自己找,根据自己的眼缘来看,这样就是所有的事情都亲力亲为。另外一种方法就是通过别人介绍,相亲来找,通过向别人描述自己的要求,比如身高,体重,年龄,学历,让别人给自己寻找一个合适的人。就是将一些事情交给一些机构容器来办。

IOC就是这样的一种思想。所有的类都会在Spring容器中登记,告诉Spring你是个什么,需要什么,spring会在系统运行到合适的时候,把你需要的东西主动给你,同样,它也可以把你给其他需要你的类。所有类的创建,销毁都由Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他的的对象,现在是所有的对象都是有Spring控制的,这也就是叫做控制反转的原因。


控制反转(IOC)和依赖注入(DI)的联系:

在Spring里创建被调用者的工作不再由调用者来完成,因此成为控制反转,创建被调用者的的实例工作通常由IOC容器来完成,然后注入调用者,因此也成为依赖注入。


原创粉丝点击