spring源码解读(二) —— 如何解析bean元素

bean元素是我们在xml配置文件中,使用到最多的一个元素,当我们在xml中配置了一个bean元素之后,spring帮助我们做了什么事呢?让我们跟进spring的源码来一探究竟。

实现配置一个简单的xml文件:



    

    

首先是在DefaultBeanDefinitionDocumentReader这个类的parseDefaultElement方法中可以看到对于默认标签的四个分之,主要对应的是import、alias、bean、beans,我们主要是看对bean的解析。spring源码解读(二) —— 如何解析bean元素_第1张图片

进入到processBeanfinition方法内,其方法主要逻辑:

1.通过parseBeanDefinitionElement方法,拿到元素bean中属性,存入到对应的实体BeanDefinitionHolder中;

2.然后判断bean标签下,是否还有子元素,如果有还要调用decorateBeanDefinitionIfRequired方法,继续解析子元素下的自定义标签;

3.然后对BeanDefinitionHolder进行注册;

4.在最后发出响应事件,通知其他监听器。

spring源码解读(二) —— 如何解析bean元素_第2张图片

那我们首先来看一下是如何解析bean元素中的属性的,也就是parseBeanDefinitionElement方法,主要逻辑如下:

1.获取bean元素中最常用的两个属性id和name;

2.调用parseBeanDefinitionElement,进一步获取其他元素,并将其封装进AbstractBeanDefinition中;

3.如果查到bean没有指定beanName,就用spring中的默认规则帮我们自动生成beanName;

4.最后将信息封装到BeanDefinitionHolder中

 进入parseBeanDefinitionElement中,可以看到,bean的所有属性都在这个方法中进行解析:

1.解析class属性,parent属性;

2.解析元数据的parseMetaElements方法;

3.解析lookup-method属性的parseLookupOverrideSubElements方法;

4.解析replace-method属性的parseReplaceMethodSubElements方法;

5.解析构造函数参数的parseConstructorArgElements方法;

6.解析property子元素parsePropertyElements方法;

7.解析qualifier子元素的parseQualifierElements方法。

 我们可以看到最终解析完之后,是返回了一个AbstractBeanDefinition这个类,我们可以来看一下这个类的作用是什么?,主要就是对应xml元素bean的一个映射实体,在我们xml配置中的所有元素,都有对应的字段进行对应。

你可能感兴趣的:(spring)