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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="myTestBean" name="myTestBean2" class="com.study.MyTestBean">

    </bean>
</beans>

首先是在DefaultBeanDefinitionDocumentReader这个类的parseDefaultElement方法中可以看到对于默认标签的四个分之,主要对应的是import、alias、bean、beans,我们主要是看对bean的解析。

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

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

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

3.然后对BeanDefinitionHolder进行注册;

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

那我们首先来看一下是如何解析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配置中的所有元素,都有对应的字段进行对应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值