IOC:控制反转(Inverse Of Control)
在没用spring框架之前我们是这样写程序的:
private UserDao userDao = new UserDaoImpl();
也就是说UserServiceImpl类中有哪个具体类属性由他自己决定,此时的编程完完全全是控制在我们写程序人的手里,我们自己new userDao,也自己决定用哪个userDao的实现。此时我们是依赖于具体的实现类。
在使用了spring框架之后:
private UserDao userDao;
此时只指定了接口,没有具体的实现类,控制权限交给了spring来管理。由spring来初始化userDao
控制反转也就是说spring控制了原来的具体实现为抽象的概念,原来是直接针对具体的实现来编写代码,使用userDao的时候,直接使用其实现。
现在使用了spring之后,这个userDao交由spring来控制了,我们要做的就是做具体的实现。这样达到了面对接口编程。
控制反转概念很模糊,也有很多种版本解释,但是没必要死扣具体的理论。理解是什么意思即可。
DI:依赖注入(Dependency Injection)
1 2 3 | < bean id = "userService" class = "com.fz.service.UserService" > < property name = "userDao" ref = "userDao" ></ property > </ bean > |
在这个userService中有个属性是userDao接口,假如我们调用userSercie的userAdd方法的时候,其实也就是在userService的实现类里面调用userDao的userAdd方法。这个userAdd方法的具体实现类依赖于spring初始化的userDao这个对象。
所以,可以理解为这个userService对象依赖于spring容器注入的userDao对象。