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 后面再说。