`

研究SpringMvc 3.2的<mvc:annotation-driven>默认干了什么

 
阅读更多
如果不配置其他参数,大致相当于以下的配置文件(参考自org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser)

<!-- 配置路径扩展名映射的媒体类型 -->
	<bean name="pathExtensionContentNegotiationStrategy"
		class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
		<constructor-arg>
			<props>
				<!-- if romePresent -->
				<prop key="atom">application/atom+xml</prop>
				<prop key="rss">application/rss+xml</prop>
				<!-- endif -->
				<!-- if jackson2Present || jacksonPresent -->
				<prop key="json">application/json</prop>
				<!-- endif -->
				<!-- if jaxb2Present -->
				<prop key="xml">application/xml</prop>
				<!-- endif -->
			</props>
		</constructor-arg>
	</bean>

	<!-- 配置映射媒体类型的策略 -->
	<bean name="mvcContentNegotiationManager"
		class="org.springframework.web.accept.ContentNegotiationManager">
		<constructor-arg>
			<list>
				<ref bean="pathExtensionContentNegotiationStrategy" />
			</list>
		</constructor-arg>
	</bean>

	<!-- 配置方法级别的@RequestMapping处理器 -->
	<bean name="requestMappingHandlerMapping"
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
		<property name="order" value="0" />
		<property name="contentNegotiationManager" ref="mvcContentNegotiationManager" />
	</bean>

	<!-- 配置数据转换服务,默认使用格式化数据转换服务,可以对日期和数字进行格式化 -->
	<bean name="conversionService"
		class="org.springframework.format.support.DefaultFormattingConversionService">
		<constructor-arg index="0">
			<null></null>
		</constructor-arg>
		<constructor-arg index="1">
			<value>true</value>
		</constructor-arg>
	</bean>

	<bean name="validator"
		class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"></bean>

	<!-- 配置数据绑定,通过转换服务实现绑定,如果包含jsr303实现还将进行校验 -->
	<bean name="webBindingInitializer"
		class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
		<property name="conversionService" ref="conversionService" />
		<!-- if jsr303Present -->
		<property name="validator" ref="validator" />
		<!-- endif -->
	</bean>

	<bean name="byteArrayHttpMessageConverter"
		class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
	<bean name="stringHttpMessageConverter"
		class="org.springframework.http.converter.StringHttpMessageConverter">
		<property name="writeAcceptCharset" value="false" />
	</bean>
	<bean name="resourceHttpMessageConverter"
		class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
	<bean name="sourceHttpMessageConverter"
		class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
	<bean name="allEncompassingFormHttpMessageConverter"
		class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean>
	<bean name="atomFeedHttpMessageConverter"
		class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter"></bean>
	<bean name="rssChannelHttpMessageConverter"
		class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter"></bean>
	<bean name="jaxb2RootElementHttpMessageConverter"
		class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
	<bean name="mappingJackson2HttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
	<bean name="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>

	<!-- 配置@RequestBody,@ResponseBody注解可用的转换器 -->
	<util:list id="messageConverters"
		list-class="org.springframework.beans.factory.support.ManagedList.ManagedList">
		<ref bean="byteArrayHttpMessageConverter" />
		<ref bean="stringHttpMessageConverter" />
		<ref bean="resourceHttpMessageConverter" />
		<ref bean="sourceHttpMessageConverter" />
		<ref bean="allEncompassingFormHttpMessageConverter" />
		<!-- if romePresent -->
		<ref bean="atomFeedHttpMessageConverter" />
		<ref bean="rssChannelHttpMessageConverter" />
		<!-- endif -->
		<!-- if jaxb2Present -->
		<ref bean="jaxb2RootElementHttpMessageConverter" />
		<!-- endif -->
		<!-- if jackson2Present -->
		<ref bean="mappingJackson2HttpMessageConverter" />
		<!-- endif -->
		<!-- if jacksonPresent -->
		<ref bean="mappingJacksonHttpMessageConverter" />
		<!-- endif -->
	</util:list>

	<!-- 将任意类型的Controller适配为Handler -->
	<bean name="requestMappingHandlerAdapter"
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="contentNegotiationManager" ref="mvcContentNegotiationManager" />
		<property name="webBindingInitializer" ref="webBindingInitializer" />
		<property name="messageConverters" ref="messageConverters" />
	</bean>

	<!-- 这个拦截器暴露转换器服务让spring:bind和spring:eval标签可用 -->
	<bean name="csInterceptor"
		class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
		<constructor-arg index="0">
			<ref bean="conversionService" />
		</constructor-arg>
	</bean>

	<!-- 现在所有拦截器都必须设定响应的路径映射 -->
	<bean name="mappedCsInterceptor"
		class="org.springframework.web.servlet.handler.MappedInterceptor">
		<constructor-arg index="0">
			<null></null>
		</constructor-arg>
		<constructor-arg index="1">
			<ref bean="csInterceptor" />
		</constructor-arg>
	</bean>

	<!-- 使用@ExceptionHandler注解的方法来处理Exception,优先级为0(最高) -->
	<bean name="exceptionHandlerExceptionResolver"
		class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
		<property name="contentNegotiationManager" ref="mvcContentNegotiationManager" />
		<property name="messageConverters" ref="messageConverters" />
		<property name="order" value="0" />
	</bean>

	<!-- 如果抛出的Exception类带有@ResponseStatus注解,响应返回该注解的Http状态码,优先级为1 -->
	<bean name="responseStatusExceptionResolver"
		class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver">
		<property name="order" value="1" />
	</bean>

	<!-- SpringMvc内部异常处理 -->
	<bean name="defaultExceptionResolver"
		class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver">
		<property name="order" value="2" />
	</bean>
分享到:
评论
1 楼 aouoy 2014-08-19  
真心不错!!!!!!!!!!!!!![size=large][/size]

相关推荐

    SpringMVC源码总结(三)mvc:annotation-driven和mvc:message-converters简单介绍

    &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters register-defaults="false"&gt; &lt;!-- 添加自定义或扩展的消息转换器 --&gt; &lt;bean class="com.example.CustomJsonConverter"/&gt; &lt;!-- 添加对XML的支持 --&gt; &lt;bean ...

    SpringMVC源码总结(二)mvc:mvc:annotation-driven背后的那些事

    在Spring MVC框架中,`mvc:annotation-driven`是Spring MVC配置中的一个重要元素,它使得我们的应用能够支持基于注解的控制器、数据绑定、格式化转换器和服务端验证等功能。这篇博客将深入探讨`mvc:annotation-...

    (代码)SpringMVC第12讲:<mvc:annotation-driven/>

    6. **上传文件支持**:通过`&lt;mvc:annotation-driven&gt;`,Spring MVC默认会提供对文件上传的支持。我们只需在处理方法上使用`@RequestParam("file") MultipartFile file`,即可接收上传的文件。 7. **JSON和XML数据...

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    因为`&lt;mvc:annotation-driven&gt;`会自动配置一些默认的`HttpMessageConverter`,如果我们的配置在它之后,可能会被覆盖。因此,正确的配置顺序至关重要。 另外,还需要在项目的Maven依赖中引入Jackson库,以便Spring ...

    SPRING MVC3.2案例讲解---配置

    &lt;mvc:annotation-driven/&gt; &lt;/beans&gt; ``` 在上述配置中,`context:component-scan`标签用于扫描指定包下的所有带有@Controller注解的类,使Spring能够自动管理这些类。`InternalResourceViewResolver`是视图解析器...

    SpringMVC核心配置文件示例.rar

    开启`&lt;mvc:annotation-driven&gt;`可启用Spring MVC对注解的处理,比如@Controller、@RequestMapping等: ```xml &lt;mvc:annotation-driven/&gt; ``` 8. **静态资源处理**: 可以配置Spring MVC处理静态资源,例如...

    SpringMVC上传文件ie提示下载json文件解决方案

    - `&lt;mvc:annotation-driven&gt;`:启用SpringMVC注解驱动,这是使用SpringMVC框架的基本配置之一。 - `&lt;mvc:message-converters&gt;`:指定要使用的消息转换器。 - `&lt;ref bean="mappingJackson2HttpMessageConverter"/&gt;...

    spring-mvc 注解方式xml配置

    `&lt;mvc:annotation-driven&gt;`则启用了Spring MVC的注解支持。 最后,`web.xml`是应用的部署描述符,配置`DispatcherServlet`以便处理所有HTTP请求: ```xml &lt;web-app&gt; &lt;servlet&gt; &lt;servlet-name&gt;dispatcher&lt;/...

    SpringMVC+Hibernate实例

    &lt;mvc:annotation-driven/&gt; &lt;!--视图解析--&gt; &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="viewClass" value="org.springframework....

    license.txt

    &lt;mvc:annotation-driven&gt; &lt;/mvc:annotation-driven&gt; 中配置Json格式乱码。代码如下: &lt;!--json格式乱码处理--&gt; &lt;mvc:message-converters register-defaults="true"&gt; &lt;bean class="org.springframework....

    SpringMVC入门

    - **启用注解驱动**:使用`&lt;mvc:annotation-driven/&gt;`来启用Spring MVC的注解功能。 - **配置视图解析器**:定义视图解析器`InternalResourceViewResolver`来处理视图名与实际视图文件之间的映射关系。 #### 三、...

    SpringMVC关于json、xml自动转换的原理研究.pdf

    在`&lt;mvc:annotation-driven&gt;`标签中,你可以自定义`message-converters`子节点来注册或覆盖默认的转换器,以满足特定的序列化需求。你可以配置自己的转换器,或者调整默认转换器的顺序,优先使用特定的转换器进行...

    后台接口返回json数据所需jar包和配置

    需要在`&lt;mvc:annotation-driven&gt;`或自定义`&lt;bean&gt;`中配置这个消息转换器。 ```xml &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters register-defaults="true"&gt; &lt;bean class="org.springframework....

    springmvc mybatis整合

    - 配置DispatcherServlet:`&lt;mvc:annotation-driven&gt;`开启对注解的支持,如@RequestMapping。 3. **配置MyBatis** (`mybatis-config.xml`) - 定义MyBatis的全局配置,包括数据库驱动、连接URL、用户名和密码等。 ...

    SpringMVC第一天.pdf

    &lt;mvc:annotation-driven /&gt; ``` - **3.2 Spring容器和SpringMVC容器是父子容器:** SpringMVC容器实际上是一个Spring容器的子容器。这意味着: - **3.2.1 SpringMVC容器可以访问父容器(即主Spring容器)中的...

    (代码)SpringMVC第1讲:HelloWorld

    &lt;mvc:annotation-driven/&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/"/&gt; &lt;property name="suffix" value=".jsp"/&gt; ...

    springMVC3.2+Hibernate4的基本配置

    &lt;mvc:annotation-driven/&gt; &lt;/beans&gt; ``` 这段配置扫描`com.yourpackage.controller`包下的所有@Controller注解的类,并启用基于注解的HTTP请求处理。 接下来是Hibernate 4,这是一个流行的对象关系映射(ORM)...

    springMVC.doc

    - `&lt;mvc:annotation-driven&gt;` 开启对注解的自动扫描,支持 @RequestMapping 等注解。 - `&lt;context:component-scan&gt;` 指定包扫描范围,找到带有 @Controller 注解的类。 例如: ```xml &lt;beans&gt; &lt;context:...

    ssm 框架配置

    &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters&gt; &lt;bean class="org.springframework.http.converter.StringHttpMessageConverter" /&gt; &lt;bean class="org.springframework.web.servlet.mvc.method.annotation....

    框架ssm整合

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;!-- 扫描Service层 --&gt; &lt;context:component-scan base-package="com.example.service"/&gt; ``` #### 五、实现业务逻辑 根据需求,需要实现用户...

Global site tag (gtag.js) - Google Analytics