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中进行处理。

  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/grasp/p/11079748.html
Copyright © 2011-2022 走看看