快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
r接口的实现,这个接口的具体类是 DefaultXmlBeanDefinitionParser,这个接口很简单,只有registerBeanDefinitions一 个方法,这个方法的作用也很明了,就是用来注册Bean的定义的,所以说类和方法的名字 一定要起得有意义,这样可以让人一看就大概了解其作用,减少了很多阅读代码的痛苦。 废话不多说,我们打开DefaultXmlBeanDefinitionParser的registerBeanDefinitions方 法,这个类就是解释XML配置文件的核心类了,打开registerBeanDefinitions方法后我们 看到如下代码:

Java代码

public int registerBeanDefinitions(BeanDefinitionReader reader, Document doc, Resource resource)        throws BeanDefinitionStoreException {      this.beanDefinitionReader = reader;      this.resource = resource;      logger.debug("Loading bean definitions");      Element root = doc.getDocumentElement();      //初始化根元素      initDefaults(root);      if (logger.isDebugEnabled()) {        logger.debug("Default lazy init ''" + getDefaultLazyInit() + "''");        logger.debug("Default autowire ''" + getDefaultAutowire() + "''");        logger.debug("Default dependency check ''" + getDefaultDependencyCheck() + "''");      }      preProcessXml(root);//一个空方法用于扩展      int beanDefinitionCount = parseBeanDefinitions(root);//解释配置的主 要方法      if (logger.isDebugEnabled()) {        logger.debug("Found " + beanDefinitionCount + " <bean> elements in " + resource);      }      postProcessXml(root); //一个空方法用于扩展      return beanDefinitionCount;    }

在这个方法当中,主要用于解释定义的有两个方法,一个是initDefaults,一个是 parseBeanDefinitions,第一个方法是用来解释根元素的属性的,例如lazy-init, autowire等,而parseBeanDefinitions就是用来解释具体的bean定义了,方法代码如下:

Java代码

protected int parseBeanDefinitions(Element root) throws BeanDefinitionStoreException {      NodeList nl = root.getChildNodes();      int beanDefinitionCount = 0;      for (int i = 0; i < nl.getLength(); i++) {        Node node = nl.item(i);        if (node instanceof Element) {          Element ele = (Element) node;          if (IMPORT_ELEMENT.equals(node.getNodeName())) {            importBeanDefinitionResource(ele);          }          else if (ALIAS_ELEMENT.equals(node.getNodeName())) {            String name = ele.getAttribute(NAME_ATTRIBUTE);            String alias = ele.getAttribute(ALIAS_ATTRIBUTE);            this.beanDefinitionReader.getBeanFactory ().registerAlias(name, alias);          }          else if (BEAN_ELEMENT.equals(node.getNodeName())) {            beanDefinitionCount++;            BeanDefinitionHolder bdHolder = parseBeanDefinitionElement(ele, false);            BeanDefinitionReaderUtils.registerBeanDefinition (bdHolder, this.beanDefinitionReader.getBeanFactory());     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号