Spring-IoC之加载 BeanDefinition源码分析(XML)

BeanFactory

BeanFactory,是访问Spring bean容器的根接口,这个接口是由包含许多bean definition的对象实现的,每个bean definition都由一个字符串名惟一标识。是实现IoC根容器的顶层接口,在Spring中许多重要的组件也直接或间接的继承了BeanFactory,例如ApplicationContext:
在这里插入图片描述
Spring是如何根据用户定义的xml文件,将bean对象加载到容器的呢?

在resources目录下定义了一个beans.xml,分析下这段代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再回到XmlBeanFactory的构造方法中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
root就是当前xml文件的根元素beans标签。
我们先跟进this.delegate = createDelegate(getReaderContext(), root, parent);这行代码看看:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回到之前的parseBeanDefinitions(root, this.delegate);这行代码,在跟进去:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回到processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate)方法:
在这里插入图片描述
在这里插入图片描述
但是在spring 3.1之后,XmlBeanFactory被spring标注为过时了。

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));

等价于:
在这里插入图片描述

总结

Spring加载资源及装配对象的过程:
1、定义好bean的配置文件。
2、通过Resource对象将bean配置文件进行抽象,抽象成一个Resource对象。
3、定义好bean工厂(各种BeanFactory)。
4、定义好XmlBeanDefinitionReader对象,并将工厂作为参数传递进去供后续回调使用。
5、通过XmlBeanDefinitionReader对象读取之前抽象出的Resource对象(包含Xml文件解析过程)。
6、本质上,Xml文件的解析是由XmlBeanDefinitionReader对象交由BeanDefinitionParserDelegate委托来完成的,实际上这里使用了委托模式。
7、IoC容器创建完毕,用户可以通过容器获取到所需的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值