一个springmvc配置文件的例子为:

  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" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
  9.  
  10. <description>spring Configuration</description>
  11.  
  12. <mvc:annotation-driven />
  13.  
  14. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  15. <property name="prefix" value="/WEB-INF/" />
  16. <property name="suffix" value=".jsp" />
  17. </bean>
  18.  
  19. <context:component-scan base-package="org.xuan.springmvc.controller"
  20. use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 -->
  21. <context:include-filter type="annotation"
  22. expression="org.springframework.stereotype.Controller" /> <!-- 子标签是用来添加扫描注解的 -->
  23. </context:component-scan>
  24. </beans>

sprin读取到这个文件后是如何进行解析的呢?

首先这个xml包含了命名空间如:

  1. xmlns:mvc="http://www.springframework.org/schema/mvc"

这个文件命名空间对应解析规则在spring-xxx-x.x.x.RELEASE.jar/META-INF/spring.handlers文件中,比如:

spring-web-4.3.7.RELEASE.jar/META-INF/spring.handlers

打开文件spring.handlers

  1. http\://www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler

得到处理的类是MvcNamespaceHandler

然后在这个xml中还有一些标签如:

  1. <mvc:annotation-driven />

这个标签对应解析配置就在MvcNamespaceHandler中,打开文件查看内容:

  1. public class MvcNamespaceHandler extends NamespaceHandlerSupport {
  2.  
  3. @Override
  4. public void init() {
  5. registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
  6. registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
  7. registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
  8. registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
  9. registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
  10. registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser());
  11. registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser());
  12. registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser());
  13. registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser());
  14. registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser());
  15. registerBeanDefinitionParser("velocity-configurer", new VelocityConfigurerBeanDefinitionParser());
  16. registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser());
  17. registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser());
  18. registerBeanDefinitionParser("cors", new CorsBeanDefinitionParser());
  19. }
  20.  
  21. }

所以当读取到annotation-driven标签的时候就会去AnnotationDrivenBeanDefinitionParser中进行处理。

spring xml 配置文件中标签的解析的更多相关文章

  1. 刨析Maven(对pom.xml配置文件常用标签的解析)

    昨天在阿里云看到了一句话,"当你Learning和Trying之后,如果能尽量把Teaching也做好,会促进我们思考".共勉! 这是关于Maven的第三篇博客,这次我们深入了解p ...

  2. [spring]xml配置文件中的"classpath:"与"classpath*:"的区别

    <bean id="sessionFactorySaas" class="org.mybatis.spring.SqlSessionFactoryBean" ...

  3. [spring]xml配置文件中bean属性的两种写法(p:configLocation <=> <property name="configLocation"/>)

    1.当作bean节点的属性:p:configLocation: <!-- mybatis文件配置,扫描所有mapper文件 --> <bean id="sqlSession ...

  4. Spring的xml配置文件中约束的必要性 找不到元素 'beans' 的声明

    今天在复习Spring MVC框架的时候,只知道xml配置文件中的约束有规范书写格式的作用,所以在配置HandlerMapping对象信息的时候没有加入约束信息之后进行测试,没有遇到问题.后来在配置S ...

  5. tomcat设置默认欢迎页、server.xml配置文件中的标签理解

    一:要求:输入网址,不加文件名便可以访问默认页面 (1)项目中只有静态文件 方法:更改tomcat下的conf目录下的web.xml文件,如下图: <welcom-file-list>元素 ...

  6. 通过java程序调用ant build.xml配置文件中指定的target

    一.概述 通过ant实现项目的自动化部署,jar包生成,替换,tomcat关停.启动,查看项目日志: 通过java程序调用已编辑好的ant脚本build.xml配置文件中指定的target: 文中文件 ...

  7. mybatis 中的 xml 配置文件中 ‘<’、 ‘>’ 处理

    mybatis 中的 xml 配置文件中 '<'. '>' 处理 1.使用转义字符将 '<'. '>' 替换掉. 描述 字符 转义字符 小于号 < < 大于号 &g ...

  8. spring*.xml配置文件明文加密

    spring*.xml配置文件明文加密 说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP.端口.用户名.密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞 ...

  9. Eclipse创建Spring XML配置文件插件

    引用:https://www.cnblogs.com/lideqiang/p/9067219.html 第一步:在 Eclipse Marketplace仓库中,搜索sts 第二步:安装Spring ...

随机推荐

  1. Spring是一个分层的Java

    Spring简介 Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架.Spring核心是IOC和AOP. Spring优点 -方便解耦,简化开发,通过Spring提供的IoC容器, ...

  2. Start and Stop Bitbucket Server

    Starting and stopping Bitbucket Server This page describes the various ways you can start or stop Bi ...

  3. [题解](优先队列广搜)POJ_3635_Full Tank

    用二元组$(city,fuel)$即可记录所有状态,以当前花费为关键字优先队列,开数组记录直接做即可 有一个点在于每次不用枚举所有的加油数量,只需要加一即可,因为如果在加一升更优的话又会扩展出加更多油 ...

  4. 我选择了学Python

    我觉得选择了这个行业,技术不行不是最可怕的,但是要有这种意愿去改变,要有学习的上进心. 人生三件事很重要,第一.在关键时候自己的选择很重要,第二.找到自己的贵人很重要,第三.就是付诸行动去做很重要. ...

  5. LDAP相关操作注意事项

    lc.Modify(entry.DN, new LdapModification(LdapModification.REPLACE, new LdapAttribute("mDBUseDef ...

  6. Hadoop_配置Hadoop开发环境(Eclipse)

    通常我们可以用Eclipse作为Hadoop程序的开发平台. 1)  下载Eclipse 下载地址:http://www.eclipse.org/downloads/ 根据操作系统类型,选择合适的版本 ...

  7. JAVA对象转换JSON

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...

  8. 安装pywin32出现--Python version 3.x required, which was not found in the registry

    这两天安装pywin32时出现了这个问题 双击.exe文件进入安装界面,然后点击下一步,它会自动定位你的python安装在什么地方,但是我的安装过程中未自动定位到python安装位置,并显示显示: 安 ...

  9. java——String、StringBuffer、StringBuilder、包装类、单双引号

    String: String是一个特殊的类,被定义为final类型,为字符串常量,同样的字符串在常量池中不能重复. 但是由于使用关键字new创建新的字符串,java会在对中分配新的空间,这样即使字符串 ...

  10. Linux安装配置相关

    1.常用汇总 useradd usertemp //添加用户 passwd usertemp //修改/设置密码 userdel usertemp //删除用户 2. profile/baserc等配 ...