Spring源码分析一
来源:互联网 发布:阿里云 混合云 编辑:程序博客网 时间:2024/05/22 00:51
容器的基本实现原理
一、功能分析
a、读取配置文件BeanXmlTest.xml
b、根据beanfactoryTest.xml中的配置找到对应bean的位置,并实例化
c、调用实例化后的实例
容器的实现就如上图那么简单吗?
二、核心类介绍
1、DefaultListableBeanFactory
XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分。
XmlBeanFactory和DefaultListableBeanFactory不同之处
a 、XmlBeanFactory使用了XML读取器XmlBeanDefinitionReader,实现了个性化BeanDefinitionReader;
b、DefaultListableBeanFactory extends AbstractAutowire CapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry;
2、XmlBeanDefinitionReader
XmlBeanDefinitionReader实现了资源文件的读取、解析、注册
a、通过XmlBeanDefinitionReader extends AbstractBeanDefinitionReader来使用resourceLoader,将资源文件转换成对应的Source文件
b、通过documentLoader对resource文件进行转换,将resource文件转换成document文件
c、通过DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocumentReader,使用 doRegisterBeanDefinitions(Element root) 将document文件转换成element文件
三、容器的基础XmlBeanFactory
这里将不同的URL资源文件,经过一些处理最后都转换成了resource文件
在Resource类中:
Resource extends InputStreamSource
这里提供了一些接口,存在性、可读性、可打开性、getDescription用于在错误处理中的打印信息
这里有两个方面
1、上方的this.reader.loadBeanDefinitions(resource)才是真正的加载resource文件,前面提到的XmlBeanDefinitionReader也是在这里完成的
**2、**super(parentBeanFactory);加载数据之前还调用了一个父类的方法
ignoreDependencyInterface的功能是忽略给定接口的自动装配功能
四、加载Bean
我们从this.reader.loadBeanDefinitions(resource)开始
从上面步骤看到三部曲:
1、获取xml文件的验证模式
2、加载xml文件,获取resource,document文件
3、根据document文件的信息注册bean
五、解析并注册BeanDefinition
从上面的代码来看,在spring里面有两大类bean声明,一个是默认的如
<bean id="test" class="test.Testbean" />
另一类是自定义的,如:
<tx:annotation=driven/>
这两中解析bean的方法差别还是很大,如果采用第一中默认配置,spring当然知道该怎么做,但是第二种的话,需要用户提供一些接口和配置
- Spring 源码分析(一)
- Spring源码分析一
- spring 源码分析(一)
- Spring源码分析(一)
- Spring源码分析(一)-导读
- spring源码分析一、源码下载
- spring源码分析,重新认识spring 一
- Spring源码分析-资源定位(一)
- Spring源码分析----IoC容器(一)
- Spring IOC ( 一 ) : DefaultSingletonBeanRegistry源码分析
- Spring 初始化过程详细分析[源码](一)
- 一 spring源码分析--- IOC容器
- spring boot 源码分析(一) 案例
- Spring Cloud源码分析(一)Eureka
- Spring Cloud源码分析(一)Eureka
- Spring Cloud源码分析(一)Eureka
- Spring源码分析之AOP(一)
- Spring源码分析IOC实现一BeanFactory
- Servlet(5)中文乱码j解决方案
- JavaScript代码规范
- 关于数据序列化(5),定制FastJSON序列化(解决Java大Long类型js的Number接收丢失数据的问题,不序列化某些属性)
- Navicat Premium连接虚拟机中的Oracle数据库
- Android hardwareAccelerated
- Spring源码分析一
- 对于c语言存储分配程序(malloc函数)实现的理解
- selenium python 设置窗口
- 第一章 安卓体系结构及开发环境
- 修改eclipse的默认编码为utf-8
- Bootstrap文件上传组件
- Javascript 异步加载详解
- [非命令行操作]GitHub中的merge与conflict
- 内存中创建一个图片,将其编码为png的输出流