分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

<mvc:annotation-driven>注册了什么

发布时间:2023-09-06 01:32责任编辑:苏小强关键词:暂无标签

前言

   上一篇文章dispatcherservlet初始化中提到,如果没有配置handlermapping就会采取默认的策略进行配置handlermapping,这篇文章就要讲述mvc:annotation-driven对默认策略的改变。它背后到底注册了哪些HandlerMapping和HandlerAdapter。 

1. 配置mvc:annotation-driven

在dispatcherservlet对应的配置文件上有这样一段配置

 ???<mvc:annotation-driven /> ???????<aop:aspectj-autoproxy proxy-target-class="true"/> ???????<mvc:interceptors> ???????<ref bean="performanceLogInterceptor"></ref> ???????<ref bean="concurrentCtrlInterceptor"></ref> ???????<ref bean="authenticationInterceptor"></ref> ???????<ref bean="authorityInterceptor"></ref> ???????<ref bean="tpsControlInterceptor"></ref> ????</mvc:interceptors>

开启了<mvc:annotation-driven/>,然后我们会找到这样的一个实现类AnnotationDrivenBeanDefinitionParser解析处理这个标签

/**
*这里清清楚楚写着该类是专门处理 <mvc:annotation-driven/>标签的 
* A {@link BeanDefinitionParser} that provides the configuration for the * {@code <annotation-driven/>} MVC namespace element
*
*这里说明了注册的HandlerMapping * <p>This class registers the following {@link HandlerMapping}s:</p> * <ul> * <li>{@link RequestMappingHandlerMapping} * ordered at 0 for mapping requests to annotated controller methods. * <li>{@link BeanNameUrlHandlerMapping} * ordered at 2 to map URL paths to controller bean names. * </ul>…… */class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { ??……}

我们来看看mvc:annotation-driven都注册了哪些东西

 ???@Override ???public BeanDefinition parse(Element element, ParserContext parserContext) { ???????Object source = parserContext.extractSource(element); ???????XmlReaderContext readerContext = parserContext.getReaderContext(); ???????RootBeanDefinition handlerMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class); ???????ManagedList<?> messageConverters = getMessageConverters(element, source, parserContext); ???????RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(RequestMappingHandlerAdapter.class); ?????????????????…… ???????RootBeanDefinition exceptionHandlerExceptionResolver = new RootBeanDefinition(ExceptionHandlerExceptionResolver.class); ?????????????RootBeanDefinition responseStatusExceptionResolver = new RootBeanDefinition(ResponseStatusExceptionResolver.class); ???????????????RootBeanDefinition defaultExceptionResolver = new RootBeanDefinition(DefaultHandlerExceptionResolver.class); ??// Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off" ???????MvcNamespaceUtils.registerDefaultComponents(parserContext, source); ???????parserContext.popAndRegisterContainingComponent(); ???????return null; ???}

MvcNamespaceUtils.registerDefaultComponents的内容如下: 

public static void registerDefaultComponents(ParserContext parserContext, Object source) { ???????registerBeanNameUrlHandlerMapping(parserContext, source); ???????registerHttpRequestHandlerAdapter(parserContext, source); ???????registerSimpleControllerHandlerAdapter(parserContext, source); ???}

至此所注册的HandlerMapping和HandlerAdapter我们都找到了。 

<mvc:annotation-driven>注册了什么

原文地址:https://www.cnblogs.com/whx7762/p/8118655.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved