• SpringMVC源码阅读(三)


    先理一下Bean的初始化路线

    org.springframework.beans.factory.support.AbstractBeanDefinitionReader

    public int loadBeanDefinitions(Resource... resources) throws BeanDefinitionStoreException
    {
        Assert.notNull(resources, "Resource array must not be null");
        int counter = 0;
        for (Resource resource : resources) {
          counter += loadBeanDefinitions(resource);
        }
        return counter;
    }
    

    org.springframework.beans.factory.xml.XmlBeanDefinitionReader

    public int loadBeanDefinitions(Resource resource)
        throws BeanDefinitionStoreException
      {
        return loadBeanDefinitions(new EncodedResource(resource));
      }
    
    protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource)
        throws BeanDefinitionStoreException
      {
        try
        {
          int validationMode = getValidationModeForResource(resource);
          Document doc = this.documentLoader.loadDocument(inputSource, getEntityResolver(), this.errorHandler, validationMode, isNamespaceAware());
          
          return registerBeanDefinitions(doc, resource);
        }
        catch (BeanDefinitionStoreException ex) {
          throw ex;
        }
        catch (SAXParseException ex) {
          throw new XmlBeanDefinitionStoreException(resource.getDescription(), "Line " + ex.getLineNumber() + " in XML document from " + resource + " is invalid", ex);
        }
        catch (SAXException ex)
        {
          throw new XmlBeanDefinitionStoreException(resource.getDescription(), "XML document from " + resource + " is invalid", ex);
        }
        catch (ParserConfigurationException ex)
        {
          throw new BeanDefinitionStoreException(resource.getDescription(), "Parser configuration exception parsing XML from " + resource, ex);
        }
        catch (IOException ex)
        {
          throw new BeanDefinitionStoreException(resource.getDescription(), "IOException parsing XML document from " + resource, ex);
        }
        catch (Throwable ex)
        {
          throw new BeanDefinitionStoreException(resource.getDescription(), "Unexpected exception parsing XML document from " + resource, ex);
        }
      }
    

      

    org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader

     protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate)
      {
        if (delegate.isDefaultNamespace(root)) {
          NodeList nl = root.getChildNodes();
          for (int i = 0; i < nl.getLength(); i++) {
            Node node = nl.item(i);
            if ((node instanceof Element)) {
              Element ele = (Element)node;
              if (delegate.isDefaultNamespace(ele)) {
                parseDefaultElement(ele, delegate);
              }
              else {
                delegate.parseCustomElement(ele);
              }
            }
          }
        }
        else {
          delegate.parseCustomElement(root);
        }
      }
    

      

  • 相关阅读:
    利用Java API通过路径过滤上传多文件至HDFS
    docker-compose部署haproxy
    PM2 常用命令
    shell脚本循环访问url直到状态码返回200跳出循环
    CentOS 7.6安装配置Chrony同步系统时钟
    PostgreSQL9.5数据库锁表问题分析与解决
    linux系统netstat命令详解(netstat常用运维命令)
    linux目录备份脚本
    PostgreSQL 锁等待监控 珍藏级SQL
    docker部署pgadmin4并通过nginx反向代理
  • 原文地址:https://www.cnblogs.com/wuxinliulei/p/5067985.html
Copyright © 2020-2023  润新知