zoukankan      html  css  js  c++  java
  • spring xml 配置文件中标签的解析

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

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

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

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

    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

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

    得到处理的类是MvcNamespaceHandler

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

    <mvc:annotation-driven />

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

    public class MvcNamespaceHandler extends NamespaceHandlerSupport {
    
        @Override
        public void init() {
            registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
            registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
            registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
            registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
            registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
            registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser());
            registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser());
            registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser());
            registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser());
            registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser());
            registerBeanDefinitionParser("velocity-configurer", new VelocityConfigurerBeanDefinitionParser());
            registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser());
            registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser());
            registerBeanDefinitionParser("cors", new CorsBeanDefinitionParser());
        }
    
    }

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

  • 相关阅读:
    记一次省赛总结
    护网杯一道密码学的感想
    配置phpstudy+phpstorm+xdebug环境
    python 模板注入
    hash扩展攻击本地实验
    kali rolling更新源之gpg和dirmngr问题
    web信息泄露注意事项
    ctf常见php弱类型分析
    文件上传小结
    ctf变量覆盖漏洞
  • 原文地址:https://www.cnblogs.com/grasp/p/11079748.html
Copyright © 2011-2022 走看看