tomcat与springmvc 结合 之---第19篇(下,补充) springmvc 加载.xml文件的bean标签的过程
writedby 张艳涛,上一篇写了springmvc对<mvc:annoXXXX/>标签的解析过程,其实是遗漏重要的细节,因为理解的不深入吧
今天接着解析<bean>标签
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 处理器 -->
<bean id="NoannaContoller" name="/go2.action" class="com.zyt.NoannaContoller"></bean>
<!-- 处理器映射器 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<mvc:annotation-driven/>
</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
所以在
                    if (delegate.isDefaultNamespace(ele)) {
                        parseDefaultElement(ele, delegate);
                    }
                    else {
                        delegate.parseCustomElement(ele);
                    }
第一个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标签的过程的更多相关文章
- 又一本springmvc学习指南 之---第22篇 springmvc 加载.xml文件的bean标签的过程
		
writedby 张艳涛,今天看spring mvc 学习指南的第2章,特意提下这个作者是how tomcat works 俩个作者之一, 喜欢上一本书的风格,使用案例来讲述原理, 在做第一个案例的时 ...
 - tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程
		
writedby 张艳涛,看springmvc 的源码太难了,怎么办, 这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签 <?xml version=&quo ...
 - (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
		
前面讲过,spring的生命周期为:实例化前奏-->实例化-->实例化后期-->初始化前期-->初始化-->初始化后期-->bean的具体调用-->销毁前-- ...
 - windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式
		
1.情景展示 做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载.解析class文件的吗? 我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认 ...
 - 19、属性赋值-@PropertySource加载外部配置文件
		
19.属性赋值-@PropertySource加载外部配置文件 加载外部配置文件的注解 19.1 [xml] 在原先的xml 中需要 导入context:property-placeholder 声明 ...
 - 死磕Spring之IoC篇 - BeanDefinition 的解析阶段(XML 文件)
		
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
 - <JVM中篇:字节码与类的加载篇>03-类的加载过程(类的生命周期)详解
		
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
 - tomcat解决加载JSP文件过大错误
		
当遇到多个Jsp include一起的时候加载时遇到如下错误: Error:SEVERE: Servlet.service() for servlet jsp threw exception org. ...
 - Springmvc加载静态文件和开启EL表达式的支持
		
一.静态文件加载问题 刚开始学习SpringMVC,发现静态文件无法加载 web.xml配置如下: <web-app id="WebApp_ID" version=" ...
 
随机推荐
- C# 扫描并读取图片中的文字
			
本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例.下面是具体步骤,供参考. 程序测试环境: Visual Studio版本要求不低于2017 图片扫描工具: ...
 - JVM面试题(史上最强、持续更新、吐血推荐)
			
文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...
 - java面试技巧及层次。
			
不断的积累,从打算找工作之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要注意什么,这里给人的 ...
 - Mac为docker和kubectl添加自动命令补全
			
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 自动命令补全是非常有用的功能,特别是当命令有特别多参数时.显然,docker/kubectl就是这样的命令.我们 ...
 - Hadoop - 彻底解决警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
			
目录 1 - 在日志配置文件中忽略警告 - 有效 2 - 指定本地库的路径 - 无效 3 - 不使用 Hadoop 本地库 - 无效 4 - 替换 Hadoop 本地库 - 有效 5 - 根据源码,编 ...
 - Ubuntu安装部署Kafka
			
Ubuntu安装部署Kafka 环境: Ubuntu 18.04.4 LTS ,JDK1.8,kafka_2.12-2.3.1 确保已经安装了JDK,JDK安装过程不再赘述.可参考文章xxxx 一.下 ...
 - 『动善时』JMeter基础 — 52、使用JMeter测试Dubbo接口
			
目录 1.Dubbo介绍 2.准备测试Dubbo接口的环境 3.Dubbo Sample界面详解 4.Dubbo Sample组件的使用 (1)测试计划内包含的元件 (2)使用zookeeper协议请 ...
 - 关于asp.net中Repeater控件的一些应用
			
在Asp.net中,我是比较喜欢用Repeater这个控件,刚刚遇到的一个问题,怎么实现单击 <asp:LinkButton>,通过后台的单击事件获取同一行数据中的其他数据(对象). 1, ...
 - LeSS 的诞生(一):大规模团队该何去何从
			
<敏捷宣言>发布后,"敏捷"被越来越多的小型开发团队认可.与此同时,另一个问题也逐渐暴露了出来:以 Scrum 为首的敏捷方法论对那些大规模的开发团队并不友好. 基于此 ...
 - CentOS-Docker安装MySQL(单点)
			
下载镜像 $ docker pull mysql 创建相关目录和文件 $ mkdir -p /usr/mysql/conf /usr/mysql/data $ chmod -R 755 /usr/my ...