Spring3中Bean的加载解析


Spring最重要的功能就是管理和加载我们需要的对象,在Spring中称为Bean,那么Spring是如何有序的管理这些对象的呢?

IOC容器的结构

Spring要管理我们的对象,那他总得有个地方来存放它,那它是如何存放的呢?有没有可能就一个Map<String, Object>,然后beanName作为Key,Bean实例作为Value呢?应该不会这么简单吧?单事实上Spring就是这么存放的,只不过它在此基础上还多了一些别的步骤。Spring3中已经支持注解扫描了,但是最重要的还是XML配置文件,通过这些XML配置文件,可以告诉Spring去加载哪些对象以及它们之间的关系。关于IOC容器,有两个非常重要的类是一定要介绍一下的,分别是DefaultListableBeanFactory和XmlBeanDefinitionReader。

DefaultListableBeanFactory

包括XmlBeanFactory在类的多个BeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册以及加载bean的默认实现,它定义了加载和注册bean的基本逻辑,后续继承它的工厂只需要关心如何从XML配置或者其他方式读取bean的配置即可。


XmlBeanDefinitionReader

XML配置文件的读取时Spring获取Bean加载的内容和特性的重要方式,就目前的Spring框架来说,Spring的功能大多都是通过配置文件来实现的,了解Spring是如何读取这些配置文件、解析XML文件对我们是很有帮助的。



Bean的加载

对于XML配置方式来说,Bean的加载基本由XmlBeanDefinitionReader来实现。

// XmlBeanDefinitionReader.java
// loadBeanDefinitions是整个资源加载的切入点	
@Override	
public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {	
	return loadBeanDefinitions(new EncodedResource(resource));	
}


我们进入到这个方法中,会发现这个方法做了以下这些事情

(1)正式上面的代码中写的new EncodedResource,它利用这个类来对资源文件进行了封装,这个资源其实就是之前读到的XML文件的内容,这里涉及到一些编码集处理文档,XML规范处理问题,但我觉得没什么可关心的,因为这都是一些公共的常用的问题处理方式,他们是一种经验而不是一种技巧

(2)将resource文件最终转换为Document对象

(3)交给注册机进行注册

接下来我们来具体看下这几个方法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值