IOC:控制反转(Inverse Of Control)
spring
在没用spring框架以前咱们是这样写程序的:编程
private UserDao userDao = new UserDaoImpl();框架
也就是说UserServiceImpl类中有哪一个具体类属性由他本身决定,此时的编程完彻底全是控制在咱们写程序人的手里,咱们本身new userDao,也本身决定用哪一个userDao的实现。此时咱们是依赖于具体的实现类。spa
在使用了spring框架以后:code
private UserDao userDao;
xml
此时只指定了接口,没有具体的实现类,控制权限交给了spring来管理。由spring来初始化userDao对象
控制反转也就是说spring控制了原来的具体实现为抽象的概念,原来是直接针对具体的实现来编写代码,使用userDao的时候,直接使用其实现。接口
如今使用了spring以后,这个userDao交由spring来控制了,咱们要作的就是作具体的实现。这样达到了面对接口编程。ci
控制反转概念很模糊,也有不少种版本解释,可是不必死扣具体的理论。理解是什么意思便可。get
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对象。