依赖注入(Dependency Injection)简称DI,与控制反转(IOC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。
简单来说,没有依赖注入之前,我们都是使用硬编码的方式,new对象,然后复制给其他对象,让它们能相互认识和协作,这里面最痛苦的是我们需要用代码方式管理生命周期的问题。
依赖注入的概念:
从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例。
依赖注入,提供了装配的能力,框架负责new对象,以及把他们组织起来,我们唯一需要做的就是调用业务方法。
控制反转的概念:
在使用Spring框架之后,对象的实例不再由调用者进行创建 ,而是由Spring容器进行创建,Spring容器会负责控制程序之间的关系,而不是由调用者的代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。
IOC(Inversion of Control,控制反转),这是Spring的核心,贯穿始终,所谓IOC,对于Spring框架来说,就是有Spring来负责控制对象的生命周期和对象之间的关系。
Spring所倡导的开发方式就是,所有的类都在Spring容器中进行登记,告诉Spring你是什么,你需要什么,然后Spring会在系统运行到适当的时侯,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有类的创建、销毁都是由Spring来控制,也就是说控制对象的生命周期的不再是引用它的对象,而是Spring 。对于某个具体的对象而言,以前是它控制其他对象,现在是所有的对象都被Spring控制,这叫控制反转。