做了什么

阅读更多

 

是一种简写形式,作用就是简化手动配置。要想知道它做了什么它的解析类就好了。

spring-webmvc包下有个MvcNamespaceHandler就是专门处理,mvc命名空间下的标签的。(这里可以看到所谓的命名空间也就是为了分类处理配置)。MvcNamespaceHandler的init()方法注册了许多解析器,其中AnnotationDrivenBeanDefinitionParser解析器就是用于解析“annotation-driven”的。

 

可以看到这个解析器做了以下事情:

1.注册以下HandlerMapping:

RequestMappingHandlerMapping

BeanNameUrlHandlerMapping

 

2.注册以下HandlerAdapter:

RequestMappingHandlerAdapter

HttpRequestHandlerAdapter

SimpleControllerHandlerAdapter

 

以及注册几个HandlerExceptionResolver、AntPathMatcher。(我们不关注)

 

我们比较关注HandlerMapping和HandlerAdapter,其实就算我们完全不配置,DispatcherServlet类也会读取DispatcherServlet.properties资源文件做一些默认配置,在DispatcherServlet.properties中

HandlerMapping默认配置的是:

BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping

HandlerAdapter默认配置的是:

HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter

 

 

而解析过程在配置RequestMappingHandlerAdapter时,会自动注册一些MessageConverter用于返回时将结果转换成想要的数据格式。比如有些时候需要将结果转成json放入ResponseBody返回,则需要注册MappingJackson2HttpMessageConverter。解析类会检查路径中是否存在

"com.fasterxml.jackson.databind.ObjectMapper"和"com.fasterxml.jackson.core.JsonGenerator"两个类(存在于jackson的jar包中),如果存在则注册MappingJackson2HttpMessageConverter。因此就必须加入相关的包,然后选择配置或者手动配

class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

你可能感兴趣的:(做了什么)