http://www.Sina.com/http://www.Sina.com /一般来说,实现某个功能需要两个对象协同完成,a对象需要b对象时。 在过去,a对象获取由new B ()、显示的b对象。 这种做法高度结合,由具体对象自行维持依存关系。 如果系统中的依赖关系很复杂,修改依赖关系是一个非常重要的过程。 使用IOC容器时,对象不是自行维护依赖关系,而是由容器负责创建、初始化和销毁依赖对象。
一、核心概念如果需要修改依赖关系,则只需要修改容器中的相应依赖对象,调用对象不需要修改代码。 变成松散耦合。IOC:控制翻转
将“对象--对象”的依赖模式,转换为“对象--容器--对象”的依赖模式从另一个角度命名spring容器。 IOC的重点是将对依赖的管理控制交给容器。 DI关注以集装箱为对象的注入依赖构建的过程。
初始化对象时,会以某种方式从容器中注入依赖对象(setter,构造函数)。
何为控制翻转:对象并不管理自己的依赖关系,由容器负责管理。1,BeanFactoryspring基础容器定义了最基本的容器功能,注意区分FactoryBean
2、应用上下文扩展到BeanFactory,具有更丰富的功能。 例如,要添加事件发布机制、父子级容器,通常直接使用应用程序上下文。
3、资源bean配置文件,一般为xml文件。 可以理解为保存bean信息的文件。
4、BeanDefinitionbeandifinition定义bean的基本信息,并在此基础上创造bean
DI(依赖注入)1,主程序
2、轮廓
3、运行结果
可以很容易地从运行结果中找到放置在xml中的kobe对象,并且确实起作用。 那么,请问
二、基础组件
三、先来一发
1:配置的bean是怎么转换成Student对象的呢?
请带着这些问题继续往下看
2:配置的value值是怎样设置到student中的呢?1,资源定位:查找配置文件
2、加载和分析bean定义
3、bean定义注册
4、bean实例化和依赖注入
3:spring容器怎样管理该对象的呢?
1、找到配置文件资源。
2、将轮廓解析为BeanDefinition
3、将BeanDefinition注册Mapname,BeanDefinition
在上述三个步骤中,将放置在配置文件中的bean//节点封装到上述映射名称,bean定义中。 为后续的getBean ()奠定了基础。
这个过程可能是,
1:找到原材料
2:将原材料放入容器中
四、容器启动步骤
此过程由getBean ) )方法触发
制作bean
实现依赖注入
这个过程根据前面提到的BeanDefition,
用1:反射或Cglib制作bean
2:根据配置依赖关系注入所需的bean,该过程递归调用getBean ()方法。
根据3:bean的范围,确定是否缓存该bean。 一般是单壳。 容器缓存对象。
这个过程大概可以理解
加工原材料,制作可以直接使用的产品。
现在,spring容器可以对外提供服务。
1、BeanDefinition载入、解析、注册容器启动的过程可以分为两大步骤
获取、分析和注册1:配置信息,并将配置文件信息转换为Mapname,beanDefinition
2:根据上述Mapname、beanDefinition实例化bean,完成后注入
以上是根据传统的xml格式配置Bean的,现在很少使用。 现在常用的是注释和javaConfig的形式配置,但换汤不换药,只是改变了容器获取Mapname、beanDefition的过程。 这也是细分集装箱容器初始化顺序的好处之一。 容易扩展。
spring容器的启动过程由spring框架封装,不需要手动编程,但了解其启动原理有助于spring的使用和扩展。 笔者只是大致了解了一下流程,如有不妥当之处,欢迎留言指导。