在Spring IOC容器的设计中,有两个主要的容器系列,一个是是实现了BeanFactory接口的简单容器系列;
这系列容器只实现了容器的最基本功能;另一个是ApplicationContext应用上下文,它是容器的高级形态,应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。
IOC容器的工作原理
-
BeanDefiniton定位。对于IOC容器来说,它为管理对象之间的依赖关系提供了帮助;
第一步就是使用Resource接口来统一定位这些BeanDefinition资源,常用的有XML文件配置信息; -
容器的初始化。在使用上下文时,需要一个初始化的过程,这个过程的入口实在refresh中实现的,
初始化过程最重要的就是对步骤一中的BeanDefintion资源进行载入,解析和注册操作,其实就是将BeanDefinition资源转化为容器中的一个HashMap结构进行存储,方便后续的管理和维护。
在容器初始化操作完成后,IOC容器就可以对外使用了,但这时IOC容器内部只是维护了BeanDefinition,
还没有生成具体的Bean和依赖注入。
依赖注入的工作原理
在客户第一次向容器getBean时,IOC容器就会对相关Bean依赖关系进行注入,如果涉及到的依赖关系也没有初始化完成,则容器会直接递归调用getBean直到该Bean所有的依赖Bean都初始化后,所有的依赖对象注入完成后,然后将创建好的Bean返回给客户。
如果Bean配置的lazy-init=false,则会在容器初始化之后,直接遍历所有的BeanDefinition判断lazy-init属性值,如果没有启用懒加载,则直接触发getBean方法,在容器初始化完成后,直接加载这些Bean。
网友评论