如何深入理解IoC控制反转
前言
``
一、核心概念(必会!!)
要想理解IOC,必须要先理解一些相关的核心概念。
1.1 什么是IOC(控制反转)?
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
Spring技术对IOC思想进行了实现,下面来看与之相关的概念。
1.2 什么是IOC容器?
Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的外部 (上述IOC概念提到的外部).
1.3 什么是Bean?
IOC容器负责对象的创建、初始化等一系列操作,被创建或被管理的对象在IoC容器中统称为Bean.
1.4 什么是DI(依赖注入)?
在容器中建立Bean与Bean直接的依赖关系的整个过程,称为依赖注入。
例:service业务层 需要依赖于数据访问层Dao 对象才能运行,那么我们需要在业务层创建一个Dao对象。
在IoC容器中,service和Dao对象都被包含在其中,所以我们可以直接靠Spring的IOC容器帮我们创建一个DAO对应的Bean.
1.5 充分解耦
上述的目标都是为了充分解耦这个重要的目标。实现原理:
- 使用IoC容器管理Bean(IoC)
- 在IoC容器内将有依赖关系的Bean进行绑定(DI)
效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。
二、IoC入门案例思路分析(XML版)
2.1 不用IOC实现案例
我们先来看一个不用IOC的简单案例:
1、先创建一个web项目,项目结构如下
2、Dao层代码:
2.1 接口:
package com.tzw.dao;
/**
* @author tzw
* @version 1.0
*/
public interface BookDao {
public void save();
}
2.2 实现类:
package com.tzw.dao.impl;
import com.tzw.dao.BookDao;
public class BookDaoImpl implements BookDao {
@Override
public void save() {
System.out.println("book Dao save... ");
}
}
3、service 层接口代码:
package com.