IOC理论推导
在我们之前的业务中,用户的需求可能会改变我们原有的代码,如果程序修改量特别大,修改一次的成本很高!
使用一个set接口,已经发生了革命性的变化:
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
- 之前,是程序主动创建对象,控制权在程序员手里
- 使用了set注入,程序不再具有主动性,而是被动接受对象
这种思想,从本质上解决了问题,我们程序员再也不用管理对象的创建了,系统的耦合性大大降低,可以更加专注在业务的实现上!这是IOC原型!
2.1 IOC本质
-
什么是IOC
- 把对象创建和对象之间的调用,交给Spring管理
- 使用IOC的目的:降低代码之间的耦合度
-
IOC底层原理
- xml解析
- 工厂模式
- 反射
-
原理解析:(UserService类调用UserDao方法)
-
原始方式:在UserService中创建UserDao实体,然后执行方法 ===> 耦合度太高了
-
工厂模式:通过一个工厂类创建UserDao实体,然后在UserService中调用
-
-
IOC原理解析
-
xml配置文件:配置创建的对象
-
service类调用dao类方法:创建工厂类
-
xml解析得到class属性值
-
通过反射创建对象(先得到字节码文件再创建得到对象)
-
-
-
IOC思想基于IOC容器完成,IOC容器的底层就是对象工厂
-
Spring提供IOC容器实现两种方式:(两个接口)
- BeanFactory:IOC容器基本实现方式,是Spring内部使用的接口,不提供给开发人员使用
- ApplicaitonContext:BeanFactory接口的子接口,提供了更多更强大的功能,一般面向开发人员使用。