0%

2.IOC理论推导

2.IOC理论指导

什么是IOC,什么是DI,为什么要使用它?

1.UserDao接口

1
2
3
public interface UserDao {
void getUser();
}

2.UserDaoImpl实现类

1
2
3
4
5
public class UserDaoImpl implements UserDao {
public void getUser() {
System.out.println("获取用户的数据");
}
}

3.UserService业务接口

1
2
3
public interface UserService {
void getUser();
}

4.UserServiceImpl实现类

1
2
3
4
5
6
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
public void getUser() {
userDao.getUser();
}
}

在我们之前的业务中,用户的需求可能会影响我们的代码,我们需要根据用户的需求去修改源代码!如果程序的代码量十分大,修改一次的成本代价十分昂贵!

我们使用一个Set接口实现,已经发生了革命性的变化

1
2
3
4
private  UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
  • 之前程序是主动创建对象,控制权在程序员手上!
  • 使用了set诸如后程序不再具有主动性,而是被动的接受了对象

这种思想从本质上解决了问题,程序员不在去管对象的创建了。系统的耦合性大大降低,可以更加专注在业务上。这就是IOC的原型。

IOC的本质

控制反转(Inversion Of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI只是IOC的另一种说法。没有IOC的程序中,我们使用面向对象编程,对象的创建与对象的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓的控制反转就是:获得依赖对象的方式反转了。

Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(DI)