writedby 张艳涛,上一篇写了springmvc对<mvc:annoXXXX/>标签的解析过程,其实是遗漏重要的细节,因为理解的不深入吧

今天接着解析<bean>标签

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  9. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
  10. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
  11. <!-- 处理器 -->
  12. <bean id="NoannaContoller" name="/go2.action" class="com.zyt.NoannaContoller"></bean>
  13. <!-- 处理器映射器 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
  14. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  15. <!-- 视图解析器 -->
  16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
  17. <mvc:annotation-driven/>
  18. </beans>

对于这个标签的处理

  • 在新建了wac(webapplicationcontext)就需要解析xml标签,那么步骤
  • 新建beanfactory,类型为 DefaultListableBeanFactory
  • 新建 beanDefinitionReader,类型为XmlBeanDefinitionReader,负责读取成员变量 configLocation内容,本例中是classpath:springmvc.xml
  • 使用了rt.jar的 DocumentBuilder 对xml文件进行了读取,这里比较神奇,根据xsi:schemaLocation=http://www.springframework.org/schema/beans/spring-beans.xsd,如何找到的factory.xml目录下文件还不太清楚,根据
    此文件定义了xml文件bean标签的解析规则,并且给bean对象添加了默认属性,最后生成了doc文件
  • 新建documentReader,类型为 BeanDefinitionDocumentReader,新建XmlReaderContext,并且里面有一个一个默认的namespaceHandlerResolver
  • 之后进入parseBeanDefinitions

看这个ele对象

非常重要的就是ele元素,有一个namespaceurl,那么这个bean的namespaceurl是http://www.springframework.org/schema/beans

之前的mvc 的nameurl应该是...mvc

所以在

  1. if (delegate.isDefaultNamespace(ele)) {
  2. parseDefaultElement(ele, delegate);
  3. }
  4. else {
  5. delegate.parseCustomElement(ele);
  6. }

第一个if就是是默认的namespace 吗

能看到默认的就是http://www.springframework.org/schema/beans

那么使用的就是默认解析器BeanDefinitionParserDelegate

看如果遇到mvc标签怎么办?

ele元素

进入customelement解析

先使用 namespaceHandlerResolver来解析 handlerMappings 就是读取所有的META-INF目录下的spring.handlers内容,读取保存到namespaceHandlerResolver.handlerMappings,根据key value键值对来查找或新建handler

可以看到根据namespaceurl来查找handler,再次使用handler来解析mvc标签

tomcat与springmvc 结合 之---第19篇(下,补充) springmvc 加载.xml文件的bean标签的过程的更多相关文章

  1. 又一本springmvc学习指南 之---第22篇 springmvc 加载.xml文件的bean标签的过程

    writedby 张艳涛,今天看spring mvc 学习指南的第2章,特意提下这个作者是how tomcat works 俩个作者之一, 喜欢上一本书的风格,使用案例来讲述原理, 在做第一个案例的时 ...

  2. tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程

    writedby 张艳涛,看springmvc 的源码太难了,怎么办, 这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签 <?xml version=&quo ...

  3. (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制

    前面讲过,spring的生命周期为:实例化前奏-->实例化-->实例化后期-->初始化前期-->初始化-->初始化后期-->bean的具体调用-->销毁前-- ...

  4. windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式

      1.情景展示 做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载.解析class文件的吗? 我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认 ...

  5. 19、属性赋值-@PropertySource加载外部配置文件

    19.属性赋值-@PropertySource加载外部配置文件 加载外部配置文件的注解 19.1 [xml] 在原先的xml 中需要 导入context:property-placeholder 声明 ...

  6. 死磕Spring之IoC篇 - BeanDefinition 的解析阶段(XML 文件)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  7. <JVM中篇:字节码与类的加载篇>03-类的加载过程(类的生命周期)详解

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. tomcat解决加载JSP文件过大错误

    当遇到多个Jsp include一起的时候加载时遇到如下错误: Error:SEVERE: Servlet.service() for servlet jsp threw exception org. ...

  9. Springmvc加载静态文件和开启EL表达式的支持

    一.静态文件加载问题 刚开始学习SpringMVC,发现静态文件无法加载 web.xml配置如下: <web-app id="WebApp_ID" version=" ...

随机推荐

  1. 【NX二次开发】查找部件中的对象 UF_OBJ_cycle_objs_in_part

    返回所有层上指定类型部件中的所有对象,不管它们的当前显示状态如何.这个例程不返回表达式.指定对象.临时(系统创建的)对象或休眠对象.休眠对象指的是从模型中删除的对象例如,如果你混合了一条边,那么这条边 ...

  2. 【NX二次开发】基准特征

    创建基准特征UF_MODL_create_fixed_daxis 创建一个固定的基准轴特征,方向由点1指向点2UF_MODL_create_fixed_dplane 创建一个固定的基准面特征,输入点和 ...

  3. oracle中如何处理null

    从两个表达式返回一个非 null 值.语法NVL(eExpression1, eExpression2)参数eExpression1, eExpression2如果 eExpression1 的计算结 ...

  4. gRPC入门—golang实现

    1.RPC 1.1 什么是RPC RPC(Remote Procedure Call),即远程过程调用,过程就是方法,简单来说,它就是一种能够像调用本地方法一样调用远程计算机进程中的方法的技术,在这种 ...

  5. SQL Prompt快捷键

    1. DF DELETE FROM  2. ssf SELECT * FROM  3. be BEGIN  END 4. ij INNER JOIN  5. ap ALTER PROCEDURE  6 ...

  6. excel自动记录项目完成进度,是否逾期,逾期/提前完成天数,计算天数可以把now()改为today()

    =IF(D38="",NOW()-C38,F38) 注:如果没有启用迭代计算,可以点击"文件"-"选项"-"公式"-&q ...

  7. mysql_my.cnf文件详解

    以下是 my.cnf 配置文件参数解释:#*** client options 相关选项 ***##以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如 ...

  8. 18、通过yum命令只下载rpm包不安装

    18.1.说明: 经常遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等,这时就需要下载 rpm 包. 18.2.方法一,yumdownloader(推荐): 如果只想通过 yum 下 ...

  9. 使用Vue-Cli搭建Ant Design Vue前端开发环境

    如果文章有帮助到你,还请点个赞或留下评论 搭建脚手架 环境准备 nodeJS vue-cli 如果没有安装点击此处查看安装方法 进入 vue ui 1.打开终端,输入命令 vue ui 2.选择项目存 ...

  10. 无需手动输入命令,简单3步即可在K8S集群中启用GPU!

    随着全球各大企业开始广泛采用Kubernetes,我们看到Kubernetes正在向新的阶段发展.一方面,Kubernetes被边缘的工作负载所采用并提供超越数据中心的价值.另一方面,Kubernet ...