========
反转控制
========
反转控制,Inverse of Control,IoC
何为控制?
- 控制即对成员变量赋值的控制权
public class UserServiceImpl implements UserService {
// 直接在代码中对成员变量赋值
// 对成员变量赋值的控制权在代码中
// UserDaoImpl的出现,增加了代码间的耦合性
private UserDao userDao = new UserDaoImpl();
@Override
public void login(String username, String password) {
...
User user = userDao.query(username, password);
...
}
@Override
public void register(User user) {
...
userDao.save(user);
...
}
}
-----------------------------------------------------
public class UserServiceImpl implements UserService {
// Spring根据配置文件对成员变量赋值(注入)
// 对成员变量赋值的控制权在Spring中
// UserDaoImpl不再现,避免了代码间的耦合
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void login(String username, String password) {
...
User user = userDao.query(username, password);
...
}
@Override
public void register(User user) {
...
userDao.save(user);
...
}
}
何为反转?
- 将对成员变量赋值的控制权由代码转移到Spring(工厂和配置文件)中
所谓反转控制,就是将对成员变量赋值的控制权由代码转移到Spring(工厂和配置文件)中。
- 好处:解耦
- 底层实现:工厂设计模式