IOC 理论
PPG007 ... 2021-12-26 Less than 1 minute
# IOC 理论
# IOC 基本原理与思想
public class UserServiceImpl implements UserService {
private UserDao userDao;
//使用set实现了动态注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- 若不使用 set 方法,程序主动创建对象,控制权在程序员手中。
- 使用后,程序不再具有主动性,转而被动接收对象,通过 set 实现了控制反转。
使用 set 方法的用户代码如下:
public static void main(String[] args) {
UserService userService=new UserServiceImpl();
((UserServiceImpl)userService).setUserDao(new UserDaoMysqlImpl());
userService.getUser();
}
1
2
3
4
5
6
7
2
3
4
5
6
7
若不使用 set 方法,则需要在 UserServiceImpl
中不停修改代码:
//每个Dao层实现都要赋值
private UserDao userDao=new UserDaoMysqlImpl();
public void getUser() {
userDao.getUser();
}
1
2
3
4
5
6
2
3
4
5
6
# IOC 本质
Tips
控制反转 IOC 是一种设计思想,DI(依赖注入)是实现 IOC 的一种方法
控制反转:对象的创建转移给第三方,获得依赖对象的方式反转了。 Spring 容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从 IOC 容器中取出需要的对象。