Spring IOC之Bean的定义和解析

理解spring ?IOC 就是能把对象之间的依赖关系给配出来,像下面最典型的一个配置文件。

定义了一个bean ?dataSource,并把它注入到另外一个bean sessionFactory中。

这里尝试整理下一个死的配置文件如何在spring中变出活的对象,并且是一个个互相有关系的对象。

首先要关注下定义在 org.springframework.context 包下的ApplicationContext 。正是contenxt为是 Spring 提供一个运行时的环境,发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。IOC容器指的应该就是这种关系集合。

ApplicationContext 是 Context 的顶级父类,可以看到他有多少种实现:

sping_applictionContext

容器初始哈的过程如下图,即从配置文件生成bean的描述BeanDifinition (一个BeanDifinition 就是配置文件中<bean></bean>部分被解析的东西),再基于BeanDifinition 实例化bean。

ioc_process

本文重点关心spring ioc中bean的解析部分,bean的创建可以参照另外一篇文章:Spring IOC之Bean的创建

 

1. 关注整个ioc的流程,入口方法是?AbstractApplicationContext 的refresh。其主要完成的事情是bean的解析,将配置的bean的定义转换成BeanDefinition,并将BeanDefinition注册到BeanFactory,完成对BeanFactory的初始化并在BeanFactory中维护一个BeanDefinition的Map。

2.?AbstractApplicationContext的obtainFreshBeanFactory

3.?AbstractRefreshableApplicationContext ?refreshBeanFactory

4.?AbstractXmlApplicationContext? loadBeanDefinitions

5. ?AbstractXmlApplicationContext?? loadBeanDefinitions

6. ?AbstractBeanDefinitionReader ?loadBeanDefinitions

7. ?XmlBeanDefinitionReader? loadBeanDefinitions

8. ?XmlBeanDefinitionReader?? doLoadBeanDefinitions

9. ?XmlBeanDefinitionReader ?registerBeanDefinitions

10. ?DefaultBeanDefinitionDocumentReader? registerBeanDefinitions

11.

至此从xml到 BeanDefinination就完成了。如何从bean的定义到真正的ben在下文中Spring IOC之Bean的创建中描述。

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: Spring IOC之Bean的定义和解析


, , ,

Trackbacks/Pingbacks

  1. Spring-cloud & Netflix 源码解析:一个注解加载Eureka client | idouba - 2016年3月16日

    […] cloud中使用的annotation就是原来大家属性的xml配置的另外一种so called […]

  2. Spring IOC之Bean的创建 | idouba - 2016年3月14日

    […] 上一篇文章讲述了从配置文件到Bean定义的过程。容器初始化完成后,在IOC容器内建立了BeanDefinition,具体的依赖关系还没有注入。当使用者第一次向IOC容器请求Bean时,IOC容器才会对这个Bean注入的依赖关系。在依赖注入完成后,使用者调用getBean方法来获得bean。不难想象这个bean创建的过程一定是一个递归的的。当我们要创建一个bean时,会递归的在context中查找需要的bean来递归创建;在依赖注入的时候,一直要获取当前bean依赖的bean,对依赖的bean进行创建和注入。 […]

发表评论