Spring3.0的基于注解的MVC非常好用,特别在加入了新的mvc的命名空间后,极大的减少了配置文件内容。但是如果想更改默认DefaultAnnotationHandlerMapping的属性,比如
useDefaultSuffixPattern,alwaysUseFullPath之类的,就会遇到Controller被加载2次,即实例化2次
DefaultAnnotationHandlerMapping对象,这个比较郁闷,因为你更改的属性并没有
生效。
奇怪的是这个问题在spring的官方论坛被提及过(http://forum.springsource.org/showthread.php?t=81238
),
不过相关问题都被关闭了(
https://jira.springsource.org/browse/SPR-6524
)。唯一可行的更改
DefaultAnnotationHandlerMapping
属性的
方法是打散<mvc:annotation-driven>
配置,也就是得了解一下这句配置究竟替换了未定义mvc namespace之前的配置方法(
https://jira.springsource.org/browse/SPR-6306
):
AFTER MVC NAMESPACE
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven/>
</beans>
BEFORE MVC NAMESPACE
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- HANDLER MAPPING RULES -->
<!-- Maps requests to @Controllers based on @RequestMapping("path")
annotation values
If no annotation-based path mapping is found, Spring MVC sends a 404
response and logs a pageNotFound warning. -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="1" />
</bean>
<!-- REGISTERED HANDLER TYPES -->
<!-- Enables annotated @Controllers; responsible for invoking an
annotated POJO @Controller when one is mapped. -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<!-- Configures Spring MVC DataBinder instances globally -->
<property name="webBindingInitializer">
<bean
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService" />
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
<!-- FIELD TYPE CONVERSION AND VALIDATION -->
<!-- Enables the Spring 3 Type Conversion system that uses Joda Time
Formatting for Date/Time types -->
<bean id="conversionService"
class="org.springframework.samples.petclinic.util.PetclinicConversionServiceFactory"
/>
<!-- Configures JSR-303 Declarative Validation with default provider
on classpath (Hibernate Validator) -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"
/>
</beans>
分享到:
相关推荐
- **排除默认拦截器**:如果`<mvc:annotation-driven />`包含默认拦截器,可以考虑使用`<mvc:default-servlet-handler>`或`<mvc:annotation-driven enable-matrix-variables="false" />`来禁用它们。 - **调整拦截器...
<mvc:annotation-driven> <mvc:message-converters register-defaults="false"> <!-- 添加自定义或扩展的消息转换器 --> <bean class="com.example.CustomJsonConverter"/> <!-- 添加对XML的支持 --> <bean ...
在Spring MVC框架中,`mvc:annotation-driven`是Spring MVC配置中的一个重要元素,它使得我们的应用能够支持基于注解的控制器、数据绑定、格式化转换器和服务端验证等功能。这篇博客将深入探讨`mvc:annotation-...
在 Spring 框架中,事务管理器是通过 `<tx:annotation-driven>` 元素来配置的。在多数据源配置中,我们可以定义多个事务管理器,每个事务管理器对应一个数据源。例如,我们可以定义两个事务管理器 `...
首先,`<mvc:annotation-driven/>`的作用是自动配置Spring MVC,启用对处理方法注解的支持,如`@RequestMapping`、`@RequestParam`、`@ModelAttribute`等。通过这个元素,我们可以避免编写大量的XML配置,转而采用...
<modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- ...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
这个错误通常表明在JDK 1.5及更高版本的环境中,解析XML配置文件时,无法识别或处理`<annotation-config>`元素。`<annotation-config>`是Spring框架中用于启用注解驱动的配置,它会自动扫描并处理带有特定注解的类,...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...
深入源码分析,`<mvc:annotation-driven />` 是Spring MVC中用于启用注解驱动的配置元素,它会自动配置一些关键组件,包括消息转换器。`MvcNamespaceHandler` 是处理这个注解的命名空间处理器,而`...
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> </beans>...
除了上述方法,还可以在`<mvc:annotation-driven>`元素内部使用`<mvc:message-converters>`配置自定义的`HttpMessageConverter`,效果与上述配置相同: ```xml <mvc:annotation-driven> <mvc:message-converters> ...
4. 如果使用XML配置,可以在`<mvc:annotation-driven>`标签内添加`<mvc:message-converters>`,并指定`jackson-mapper-asl`或`jackson-databind`的全限定类名。 确保这些配置正确无误后,Spring MVC应该能正常处理...
<artifactId>spring-webmvc</artifactId> <version>5.x.y.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.x.y....
<mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> ...
这个文件包含了所有在Spring MVC 4.2版本中可以使用的XML配置元素和属性,例如`<mvc:annotation-driven>`、`<bean>`、`<context:component-scan>`等。这些配置元素允许开发者声明式地配置控制器、视图解析器、转换...
<mvc:annotation-driven/> </beans> ``` 在上述配置中,`context:component-scan`标签用于扫描指定包下的所有带有@Controller注解的类,使Spring能够自动管理这些类。`InternalResourceViewResolver`是视图解析器...
赠送jar包:mybatis-plus-annotation-3.5.1.jar; 赠送原API文档:mybatis-plus-annotation-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-annotation-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-...