名词解释:
IOC:控制反转(英文全称:Inversion of Control)
DI: 依赖注入(英文全称:Dependency Injection)
IOC和DI其实是讲的一个东西:封装对对象的实例化
形象的比喻:
原先:对于对象的创建,通过new进行实例化——等同于 自己找媳妇(在程序中被称为依赖)
而现在:统一通过“父母”——BeanFactory(一个类),来进行对象的创建
好处::自己省事了,不用自己去找“媳妇”——“依赖”
程序层面:类内“依赖”的对象,不再使用new方式进行创建,而是使用BeanFactory来进行统一管理,这样就减少了类间耦合,增加了程序的灵活性
简单样例展示:
- 旧模式
package cn.edu.hactcm.online_exam.service.impl;
public class QuestionServiceImpl implements IQuestionService {
private IQuestionDao questionDao = new questionDaoImpl();
//解释:questionDao就是questionServiceImpl的依赖(媳妇)
//这个就是“自己找媳妇”,在类内进行new实例化自己需要的对象
....
}
- 新模式
package cn.edu.hactcm.online_exam.service.impl;
public class QuestionServiceImpl implements IQuestionService {
private IQuestionDao questionDao;
public void setQuestionDao (IQuestionDao questionDao) {
this.questionDao = questionDao;
}
//解释:(使用set方法进行注入——准确来说是属性注入)在BeanFactory类里面调用此方法,来完成对象的注入
原理解释:
- BeanFactory的调用是在另一个核心里面进行调用——前置控制器(DispatcherServlet——Spring MVC的核心类),前置控制器是位于View层与Controller层之间,负责处理所有请求,并将其分发给相应的Controller来处理
- BeanFactory读取bean.xml配置文件(类之间的依赖关系),根据传入的参数动态创建对象