一、概述
IOC:控制反转,以前对象需要自己new进行创建,现在把对象创建的操作交给了spring框架,用的时候直接找框架要即可;spring负责所有的对象和管理,称之为IOC容器。
DI:依赖注入,一个A类需要执行B类中的方法,那就是A类依赖B类,如果A类要正常运行,需要注入B类的对象;这就是依赖注入;spring框架进行自动注入对象,默认使用的是setter方法。
二、IOC的入门
1、创建项目,导入spring所需的jar包
如下图所示:
2、创建接口类
2.1、dao层
BookDao接口代码如下:
public interface BookDao {
public void save();
}
BookDaoIMpl类代码如下:
public class BookDaoImpl implements BookDao{
@Override
public void save() {
System.out.println("BookDaoImpl...save");
}
}
2.2、service层
BookService接口代码如下:
public class BookDaoImpl implements BookDao{
@Override
public void save() {
System.out.println("BookDaoImpl...save");
}
}
BookServiceImpl类代码如下:
public class BookServiceImpl implements BookService {
//BookServiceImpl依赖BookDao的对象
BookDao bookDao;
//setBookDao如果没有这个方法,框架就不能自动注入
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override
public void save() {
System.out.println("BookServiceImpl...save");
bookDao.save();
}
}
BookServiceVip类代码如下:
public class BookServiceVip implements BookService {
//BookServiceVip依赖BookDao的对象
BookDao bookDao;
//setBookDao如果没有这个方法,框架就不能自动注入
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override
public void save() {
System.out.println("BookServiceVip...save");
bookDao.save();
}
}
3、使用spring完成IOC的配置和DI依赖注入
3.1、创建spring的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 告诉spring框架,创建管理哪些对象
id: 给创建出来的对象起个名字
class: 要创建对象对应类的全类名
-->
<!-- 实现BookServiceImpl依赖注入bookDao -->
<bean id="bookDao" class="com.dou.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dou.service.impl.BookServiceImpl">
<!-- 通过property给类的属性进行注入数据
常规类型使用value注入;
对象使用tef引用上面定义的;-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
3.2、依赖注入
依赖注入在 BookServiceImpl 和 BookServiceVip 已经写了有注释,通过setting方法使它们变成自动注入
如图下所示:
4、测试
测试分为三步:
1. 获取IOC容器
2. 从容器中获取BookService对象
3. 执行方法
示例代码如下:
public class Test01 {
BookService bookService;
@Test
public void test01(){
//对象创建由spring框架创建,此处只需要问IOC容器要
//1、通过 ClassPathXmlApplicationContext加载spring.xml获得IOC容器
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2、从IOC容器中根据名字获取对象
bookService = (BookService) classPathXmlApplicationContext.getBean("bookService");
//3.执行方法
bookService.save();
}
}