快速业务通道

Spring源代码分析-XmlBeanFactory导读 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

Spring源代码分析-XmlBeanFactory导读

时间:2011-03-29 javaeye calmness

源代码分析,是一件既痛苦又快乐的事情,看别人写的代码是通过的,但当你能够看 明白的时候,相信快乐也会随之而来,为了减少痛苦,更快的带来快乐,在这里希望通过 这篇文章对觉得困难的朋友有一个帮助。

首先来打开该类的代码,我们将看到如下代码:

Java代码

public class XmlBeanFactory extends DefaultListableBeanFactory {    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);      this.reader.loadBeanDefinitions(resource);    } }

这个类的代码很简单,一个成员对象加两个构造函数,从这里我们可以看出,最重要 的地方在于最后一个构造函数:

Java代码

super(parentBeanFactory);    this.reader.loadBeanDefinitions(resource);

第一句就是将父亲工厂交给父类的构造函数,实际上最后也就是把父工厂保存到类的 parentBeanFactory成员对象中,这个对象是在AbstractBeanFactory抽象类中定义的,而 这个父工厂也会一直传递到该抽象类进行保存。第二句就是整个类中最重要的地方了,顾 名思义,它的目的是通过XmlBeanDefinitionReader这个XML的Reader从资源resource中( 也就是你的配置文件)读取bean的定义。接下来我们打开XmlBeanDefinitionReader的 loadBeanDefinitions方法,我们可看到在这个方法里代码就一行,调用了一个同名不同 参的方法,而参数是EncodedResource的一个实例,这个类实际上是Resource的一个包装 类,用来保存资源的Encode的,那接下来我们再看被调用的loadBeanDefinitions方法, 这个方法里最主要的部分就是:

Java代码

InputSource inputSource = new InputSource(inputStream);          if (encodedResource.getEncoding() != null) {            inputSource.setEncoding(encodedResource.getEncoding ());          }      return doLoadBeanDefinitions(inputSource, encodedResource.getResource());

这里的目的是将资源包装成一个InputSource,连同Resource作为参数传递到 doLoadBeanDefinitions方法

Java代码

DocumentBuilderFactory factory = createDocumentBuilderFactory(); if (logger.isDebugEnabled()) {          logger.debug("Using JAXP implementation [" + factory + "]"); } DocumentBuilder builder = createDocumentBuilder(factory); Document doc = builder.parse(inputSource); return registerBeanDefinitions(doc, resource);

Spring源代码分析-XmlBeanFactory导读(2)

时间:2011-03-29 javaeye calmness

这个方法的目的一目了然,就是为了将资源解释成为Document对象,然后调用 registerBeanDefinitions方法,这里不做详细解释,不了解的话请去看看关于JAXP的介 绍。接下来我们打开registerBeanDefinitions方法:

Java代码

public int registerBeanDefinitions(Document doc, Resource resource) throws BeansException {      XmlBeanDefinitionParser parser =          (XmlBeanDefinitionParser) BeanUtils.instantiateClass (this.parserClass);      return parser.registerBeanDefinitions(this, doc, resource);    }

这里创建了一个XmlBeanDefinitionParse

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号