Web开发笔记 Spring IOC原理
2015-04-27 22:17
253 查看
文章转自:点击打开链接
图1 对象之间复杂的依赖关系
图2 IOC解耦过程
图3 拿掉IOC容器后的过程
软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。
控制被反转后,获得依赖对象的过程由自身管理变为了由IOC容器注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入对象中。
依赖注入和控制反转是从不同的角度描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性
图1 对象之间复杂的依赖关系
图2 IOC解耦过程
图3 拿掉IOC容器后的过程
软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。
控制被反转后,获得依赖对象的过程由自身管理变为了由IOC容器注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入对象中。
依赖注入和控制反转是从不同的角度描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性
相关文章推荐
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- Beginning Spring学习笔记——第11章 使用Spring开发REST风格的Web服务
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- spring学习笔记(1)IOC核心原理解析
- Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring?
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- JavaWeb学习笔记-spring-03-ioc-WebApplicationContext
- Spring整合web项目原理以及IOC与DI关系
- Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring?
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- [Spring开发笔记]Spring ioc补充
- spring ioc容器的学习笔记4---XmlBeanFactory ioc容器的简单设计原理解析
- Spring Boot 学习笔记【6】使用FreeMarker与BootStrap开发Web
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- Spring学习笔记 IOC原理实现
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- [spring入门学习笔记][spring的IoC原理]