Spring源码深度解析-3、从XmlBeanFactory到编程式使用IOC容器

XmlBeanFactory简述

XmlBeanFactory继承自DefaultListableBeanFactory,因此他拥有一个IOC容器最基本的功能,包括getBean,getBeanDefinationsName,除此之外,通过这个容器的名称也能了解到这个容器是可以读取以Xml文件方式定义的BeanDefinition的IOC容器。
查看源码,可以看到XmlBeanFactory中确实有一个XmlBeanDefinitionReader类作为BeanDefination的读取类用以读取以Xml文件方式定义的BeanDefinition的IOC容器。

XmlBeanFactory的简单使用demo

//创建resource,这个resource包含由xml文件定义的beandefinition信息
ClassPathResource resource = new ClassPathResource("bean.xml");
//通过资源创建容器并初始化
XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);

XmlBeanFactory源码解析

public class XmlBeanFactory extends DefaultListableBeanFactory {

//传入BeanFactory创建XmlBeanDefinationReader
	private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

	public XmlBeanFactory(Resource resource) throws BeansException {
		this(resource, null);
	}


	public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
		super(parentBeanFactory);
		//通过XmlBeanDefinition来加载BeanDefinition
		this.reader.loadBeanDefinitions(resource);
	}

}

如何编程式使用IOC容器

通过分析如上的代码:
在使用IOC容器的时候,需要以下四个步骤:
1、创建IOC配置文件的抽象资源,注意这个抽象资源是包含了 可以读取以xml定义的BeanDefinition 信息
2、创建一个BeanFactory
3、创建一个BeanDefinitionReader
4、通过BeanDefinitionReader来读取资源文件,加载BeanDefinition。完成整个IOC容器的加载与初始化,至此这个IOC容器可以使用了。
代码如下:

ClassPathResource resource = new ClassPathResource("bean.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource)

后记

至于reader如何实现loadBeanDefinitions 后面再说。

猜你喜欢

转载自blog.csdn.net/qq_28605513/article/details/85314564