IOC:控制反转(Inversion of Control),它是一种思想,主要目的就是将对象的控制权由开发人员变为程序本身,让程序来管理对象的创建、销毁(生命周期),开发人员直接使用由容器管理的对象即可,不需要手动的创建对象。
一、IOC(控制反转)
1.1 控制
控制就是对象的创建过程由开发人员来管理,比如
Object obj = new Object();
这个obj对象开发人员想在类加载时创建或任何时候创建都可以,对象的创建过程完全由开发人员掌控。
1.2 反转
将对象的控制权力由开发人员转交给IOC容器(程序本身)去管理,不需要再由开发人员手动的创建对象。
1.3 使用IOC前
没有IOC容器之前,我们想使用一个对象之前,必须要手动创建(new)一个对象之后才可以使用,这种创建方式耦合度非常高。
1.4 使用IOC后
在使用IOC容器之后,当我们想使用一个对象时,直接在IOC容器中获取这个对象的实例就可以直接使用这个对象,减少了手动创建对象这一过程,大大简化了开发的过程,同时也实现了解耦。
二、DI(依赖注入)
IOC是一种思想,在Spring中,IOC思想的具体实现就是DI。
2.1 依赖
一个类中引入了另一个类的对象作为属性时就是依赖
class Department{
private Integer did;
private String dname;
}
class Employee{
private Integer eid;
private String ename;
private Department depart; // 依赖
}
2.2 注入
为一个属性赋值,在Spring中就叫做注入。
// 基本数据类型
int a = 0;
// 引用数据类型
Object o1 = new Object();
以上这些在Spring中都可以称之为注入
三、Spring中的DI
如果想在Employee对象中使用Department对象,没有Spring时,我们需要手动new一个Department对象,这样Employee类紧紧依赖着Department类,也就是他们之间耦合度非常高。在使用Sprting框架后,通过简单的配置或注解,框架自动的帮我们创建一个Department对象,放入到IOC容器中,在程序中有依赖着Department对象的代码中,会自动的注入Department对象(自动的为对象赋值),至于Spring框架是如何生成Department对象,怎么生成的,依赖着Department对象的类不需要关心,只需要知道现在可以使用就这个对象就好了。这样Employee类不完全依赖Department类,对象的创建完全依赖IOC容器,实现了解耦操作。