IoC 控制反转
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。常用的方法有“依赖注入”,“依赖查找”。
分析实现
- 先写一个Dao接口
public interface UserDao {
void getUser();
}
- 再去写Dao的实现类
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("默认获取用户的数据");
}
}
- 然后去写UserService的接口
public interface UserService {
void getUser();
}
- 最后实现service的实现类
UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
- 测试一下
@Test
public void userTest() {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
}
上面是原来的方式,下面通过增加实现类测试
- 增加一个Dao的实现类
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Mysql获取用户数据!!!!");
}
}
- 变更service的实现类
UserDao userDao = new UserDaoMysqlImpl();
@Override
public void getUser() {
userDao.getUser();
}
接下来通过IoC的方式
- 变更service的实现类
public class UserServiceImpl implements UserService{
private UserDao userDao;
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
- 测试
//控制反转IoC的测试
@Test
public void iocTest() {
UserService userService = new UserServiceImpl();
((UserServiceImpl)userService).setUserDao(new UserDaoImpl());
userService.getUser();
}