spring来源理解-BeanFactory子类XmlBeanFactory创建过程

简介:

BeanFactory

1:BeanFactory什么:

官方解释The root interface for accessing a Spring bean container,翻译成中文spring bean容器的最基本接口,也就是作为一个spring容器,必须实现它。

2:BeanFactory容器乘的要内容是什么

This interface is implemented by objects that hold a number of bean definitions

2.1他能够乘bean definitions。

对于bean definitions是什么东东,应该看BeanDefinition这个类的定义:A BeanDefinition describes a bean instance, which has property values,constructor argument values, and further information supplied byconcrete implementations.说白了就是对<bean></bean>标签内容的解析,不过不过xml中<bean>的解析。并非实例化的对象。跟踪BeanFactory的实现类XmlBeanFactory代码发现事实上现了接口BeanDefinitionRegistry。定义了对BeanDefinition的增删改查等操作

2.2他能够乘单例对象

详细实例化对象的注冊位置(通常是单例的。对于原型没有必要保存)。跟踪BeanFactory的实现类XmlBeanFactory代码发现事实上现了接口SingletonBeanRegistry,在这个接口了,专门定义了单例对象的增增删改查等操作。

XmlBeanDefinitionReader

从xml中读取bean definitions。将xml解析成dom文档,并通过一个实现了 BeanDefinitionDocumentReader接口的对象来解析该dom文档,终于将xml的标签解析为BeanDefinition对象。

BeanDefinitionDocumentReaderBeanDefinitionParserDelegate

将dom文档终于解析为BeanDefinition,并加入到BeanDefinition容器中。

详细的操作流程

BeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring.xml"));


1 在XmlBeanFactory的构造函数中运行
this.reader.loadBeanDefinitions(resource);
reader为其一个字段
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

2在loadBeanDefinitions中主要运行的为
doLoadBeanDefinitions(inputSource, encodedResource.getResource())
3在doLoadBeanDefinitions中主要运行的为
registerBeanDefinitions(doc, resource);
4获取BeanDefinitionDocumentReader并运行
registerBeanDefinitions(doc, createReaderContext(resource));
5在registerBeanDefinitions方法中主要运行的为
parseBeanDefinitions(root, delegate);
6通过delegate对dom文档进行解析
delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);
解析类型非常多,再次仅仅是为特殊标签进行了解析
7对解析完毕的BeanDefinition进行注冊
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());

解析的xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
		<bean id="person" class="model.Person">
		<property name="name">
			<value>lisi</value>
		</property>
		<property name="sex">
			<value>boy</value>
		</property>
	</bean>
</beans>

解析流程图




注意:此博客为我第一次阅读spring源代码,源代码内容为spring3.0.当中的错误之处请多包涵并欢迎指正。流程图也存在不规范之处

版权声明:本文博主原创文章,博客,未经同意不得转载。







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4887521.html,如需转载请自行联系原作者


相关文章
|
6月前
|
存储 Java Spring
深入解析Spring框架的核心:BeanFactory体系结构探究
深入解析Spring框架的核心:BeanFactory体系结构探究
81 0
|
7月前
|
Java Spring
|
8月前
|
Java Spring 容器
Spring中BeanFactory和FactoryBean的区别?
一位工作了4年的小伙伴,去京东面试被问到这样一个问题,Spring中的BeanFactory和FactoryBean有什么区别?因为没有看过源码,当时就感觉这是一个文字游戏,感觉没什么区别? 那今天,我就给大家来聊清楚。另外,往期面试题解析中配套的文档我已经准备好,想获得的可以在我的煮叶简介中找到。好了,我们先来看BeanFactory。
32 0
|
1月前
|
Java 测试技术 数据库连接
【Spring源码解读!底层原理高级进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨
【Spring源码解读!底层原理高级进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨
|
3天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
14 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
1月前
|
XML Java 开发者
【Spring源码解读 底层原理高级进阶】【上】探寻Spring内部:BeanFactory和ApplicationContext实现原理讲解
【Spring源码解读 底层原理高级进阶】【上】探寻Spring内部:BeanFactory和ApplicationContext实现原理讲解
|
3月前
|
Java 容器 Spring
Spring5源码(13)-BeanFactory简介
Spring5源码(13)-BeanFactory简介
29 1
|
3月前
|
XML Java 数据格式
Spring5源码(8)-BeanFactory和FactoryBean的区别
Spring5源码(8)-BeanFactory和FactoryBean的区别
30 0
|
3月前
|
Java C++ Spring
深入Spring原理-1.BeanFactory与ApplicationContext的区别
深入Spring原理-1.BeanFactory与ApplicationContext的区别
44 0
|
4月前
|
XML Java 数据格式
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
30 0