IOC:控制反转(Inversion of Controller),对象的依赖关系被反转了,反转给IOC容器进行管理,并且由IOC容器完成对象的注入。这样做的好处,降低了对象之间的依赖。
A类创建对象时需要B类的对象才能进行创建,B类在创建对象时需要A类的对象才能创建,那么由于A类和B类的依赖性太高,所以导致既不能创建A类对象也不能创建B类对象。
public class A{
private B b;
public A(B b){
this.b = b
}
}
public class B{
private A a;
public B(A a){
this.a = a;
}
}
通过IOC就可解决上述的依赖性过高的问题,将A类和B类出创建出的对象交给IOC容器,当需要对象时由IOC容器注入给相应的类。
IOC注入的方式一共有3种:
1.接口注入
2.setter注入
3.构造器注入
小结:
所以控制反转IoC是指创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己控制的,而现在这种权力转移到IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。
EI:Dependency Injection,“依赖注入”:组件之间依赖关系由容器在运行期决定,换句话说,由IOC容器动态的将某个依赖关系注入到组件之中。这样做的好处是提高了组件的重用性,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
总结:EI是IOC动态的向对象提供组件的一种形式。首先应用程序依赖于IOC容器,依赖IOC向外部提供所需的资源。IOC容器将资源提供给外部对象实现依赖注入。