Spring:IOC和DI

本文最后更新于:3 天前

对IOC和DI的理解

IOC:控制反转,是一种设计理念,由第三方来管理与控制对象

通常我们创建对象时都是通过new关键字来实现的,这就带来一些问题:

1、每次我们需要使用对象时,都要手动创建。

2、当我们需要对某一个类进行修改时,需要手动将所有通过new关键字创建的对象从新编写,工作量将会非常恐怖。

1
2
3
4
IDAO dao = new UserDAO();

IDAO dao = (IDAO) applicationContext.getBean("userDAO");
<bean id = "userDAO" class = "com.test.dao.UserDAO"/>

解决办法就是使用“对象容器”,动态生成JavaBean对象,通过使用“对象容器”(applicationContext),我们可以将整个程序中有效的依赖实现“解耦”(降低耦合解除耦合)。

控制反转

传统情况下我们使用new关键字创建对象,也就是由我们编译的程序代码决定使用哪个对象,我们称之为“正向控制”。而“控制反转”则是将对象的控制权交给第三方的“对象容器”,由“对象容器”在运行时创建对应的对象,再赋值给对应的变量。

IOC的好处

让对象和对象之间的引用实现了有效的解耦。因为是在运行时完成的,所以当我们系统底层的类发生变化的时候,只需要修改配置文件就可以,极大的方便了工程维护和代码管理。

DI:依赖注入,是IOC控制反转理念的具体技术实现,由对象容器在运行时动态注入对象

DI 依赖注入是基于两种技术来实现的

1、反射

在运行时,进行动态的创建、设置以及管理。

Java反射机制

在运行状态下,对于任意一个类都能知道他的属性和方法;对于任意一个对象都能调用它的任意一个属性和方法。这种动态获取的信息以及动态调用方法的功能称为Java的反射机制。

2、工厂模式

不必关注对象创建的细节,直接返回接口,在运行时由工厂动态决定是由哪个对象进行实例化。

总结

DI是一种具体的技术实现,它是对宏观的IOC理念的一种技术上的诠释,在Spring中使用了反射和工厂模式来实现DI。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!