简单理解IOC和DI

来源:互联网 发布:python生成随机50个数 编辑:程序博客网 时间:2024/06/08 14:51

(一)IOC(Inversion of Control):控制反转
Spring的IOC容器获得控制权。
(1)在类内部不为对象a赋值

public class A {    public void print(){        System.out.println("hello");    }}
public class B {    private A a;    public void print(){        a.print();//a为null,调用该方法会有空指针异常        //因此必须为属性a赋值,那么怎么赋值呢?    }}

(2)在类内部为对象a赋值

public class B {    private A a=new A();//由类本身控制对象a,控制权在自己手上    public void print(){        a.print();    }}

(3)在类外部为对象a赋值(需要set方法)

public class B {    private A a;    public void setA(A a) {        this.a = a;    }    public void print(){        a.print();    }}
public class Main {    public static void main(String[] args) {        A a=new A();        B b=new B();        b.setA(a);//在类外部为属性a注入值,控制权被交出来了        b.print();    }}

(4)在Spring框架中,Spring的IOC容器获取控制权,即控制权反转给IOC容器了。
由IOC容器调用set方法为对象属性注入值。
这里写图片描述
(5)IOC容器为依赖对象注值有2种方式:调用set方法;注解注入。后续讲解
(二)DI(Dependency Injection):依赖注入,DI是IOC的另一种表述
(1)DI是IOC的另一种表述,IOC和DI说明的是同一件事物。
(2)容器为我注入依赖对象,而不是我自己去注入依赖对象。即由IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。
(3)我们依赖容器获取资源,容器把资源给我们。
(4)相对于IOC而言,DI的表述更容易被理解

原创粉丝点击