DI:依赖注入,一个BookService类的功能需要依赖另外一个BookDao类配合,同时需要赋上一
个具体的对象,则成这种关系是依赖注入;
IOC:控制反转,以前依赖的对象自己直接new,现在不需要new,框架会自动注入对象,创建对
象的权利转移给了框架;
spring框架负责所有对象的创建、管理和依赖注入;所有的对象存储的容器叫做IOC容器;
1.
创建项目,导入
spring
的
jar
包
2.按照目录结构创建接口及其实现类
servlet层
public class BookServlet {
BookService bookService;
@Test
public void add() {
System.out.println("BookServlet...add");
bookService.save();
}
}
service
层
//接口
public interface BookService {
void save();
}
//实现类
public class BookServiceImpl implements BookService {
private BookDao bookDao;
@Override
public void save() {
System.out.println("BookServiceImpl...save");
bookDao.insert();
}
}
dao
层
//接口
public interface BookDao {
public void insert();
}
//实现类
public class BookDaoImpl implements BookDao {
@Override
public void insert() {
System.out.println("BookDaoImpl...save");
}
}
3.
使用
spring
完成
IOC
的配置和
DI
依赖注入
创建
spring
的核心配置文件
BookServiceImpl
需要给
bookDao
属性设置
setter
方法,框架才能自动注入
bean
标签表示把对应
class
的对象创建到
IOC
容器中,如果当前对象有依赖的其他对象,那么可以
通过
property
对依赖的对象使用
ref
引用容器中已经注册过的对象。
service层 BookServiceImpl
public class BookServiceImpl implements BookService {
private BookDao bookDao;
;
}
@Override
public void save() {
System.out.println("BookServiceImpl...save");
bookDao.insert();
}
}
在
servlet
中进行测试
1.
首先获取
IOC
的容器;
2.
从容器中获取
bookService
对象;
3.
执行方法:
servlet
执行
---service
执行,由于
spring
完成了依赖注入
------dao
层执行
public class BookServlet {
BookService bookService;
@Test
public void add() {
System.out.println("BookServlet...add");
//1.获得IOC容器
ClassPathXmlApplicationContext context=new
ClassPathXmlApplicationContext("spring.xml");
//2.根据名字从容器中获取对象
bookService= (BookService) context.getBean("bookService");
bookService.save();
}
}