上节我们已经对ClassPathResource进行了讲解,下面进入最最重要的XmlBeanFactory。
简化的源码:
public class XmlBeanFactory extends DefaultListableBeanFactory {
/**以下是注释操作
* public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable
public XmlBeanDefinitionReader(BeanDefinitionRegistry registry) {
super(registry);
}
protected AbstractBeanDefinitionReader(BeanDefinitionRegistry registry) {
Assert.notNull(registry, "BeanDefinitionRegistry must not be null");
this.registry = registry;
*/
//reader的registry得到初始化值为XmlBeanFactory对象,this指代的就是此时创建的XmlBeanFactory对象
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
/**
* 构造函数,以new ClassPathResource("bean_test.xml")为参数,Resource是父类接口
* Create a new XmlBeanFactory with the given resource,
*/
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
/**
* 创建对象,并进行注册bean
* Create a new XmlBeanFactory with the given input stream,
*/
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
this.reader.loadBeanDefinitions(resource);
}
以下是原版代码:
首先看看XmlBeanFactory的基本情况:
public class XmlBeanFactory extends DefaultListableBeanFactory {
/**
* public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable
public XmlBeanDefinitionReader(BeanDefinitionRegistry registry) {
super(registry);
}
protected AbstractBeanDefinitionReader(BeanDefinitionRegistry registry) {
Assert.notNull(registry, "BeanDefinitionRegistry must not be null");
this.registry = registry;
*/
//reader的registry得到初始化值为XmlBeanFactory对象,this指代的就是此时创建的XmlBeanFactory对象
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
/**
* 构造函数,以new ClassPathResource("bean_test.xml")为参数,Resource是父类接口
* Create a new XmlBeanFactory with the given resource,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
/**
* 创建对象,并进行注册bean
* Create a new XmlBeanFactory with the given input stream,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @param parentBeanFactory parent bean factory
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}