上节我们已经对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); }