WebMvcConfigurationSupport和WebMvcConfigurerAdapter之间的区别

时间:2013-07-27 13:59:14

标签: spring spring-mvc

我想添加资源处理程序。在论坛中,他们使用WebMvcConfigurationSupporthttp://forum.springsource.org/showthread.php?116068-How-to-configure-lt-mvc-resources-gt-mapping-to-take-precedence-over-RequestMapping&p=384066#post384066

和文档说WebMvcConfigurerAdapterhttp://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html

有什么区别,使用哪一个?两者都有我需要的addResourceHandlers方法。

这是我目前的课程:

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    public @Override void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources");
    }

    public @Bean TilesViewResolver tilesViewResolver() {
        return new TilesViewResolver();
    }

    public @Bean TilesConfigurer tilesConfigurer() {
        TilesConfigurer ret = new TilesConfigurer();
        ret.setDefinitions(new String[] { "classpath:tiles.xml" });
        return ret;
    }
}

4 个答案:

答案 0 :(得分:22)

答案在上面引用的文档中:

  

如果WebMvcConfigurer的自定义选项未公开   您需要配置的东西,考虑删除@EnableWebMvc   注释并直接从WebMvcConfigurationSupport扩展   覆盖选定的@Bean方法

简而言之,如果@EnableWebMvc适合您,则无需进一步查看。

答案 1 :(得分:3)

最好扩展WebMvcConfigurationSupport。它提供了更多自定义选项

可以正常使用
configureMessageConverters(List<HttpMessageConverter<?>> converters) 

因为您可以使用

添加这些转换器
addDefaultHttpMessageConverters(converters);

WebMvcConfigurerAdapter无法使用。

点击[此处] How to configure MappingJacksonHttpMessageConverter while using spring annotation-based configuration?

如果扩展WebMvcConfigurerAdapter,它在配置Jackson和Jaxb时会表现得很奇怪。 发生在我身上!!!

答案 2 :(得分:2)

如果你使用ConfigurationSupport类,那么在尝试提供静态资源时,请记住麻烦,因为它不起作用。

答案 3 :(得分:1)

我最近在配置转换器时解决了同样的问题,结果是quite a long post

默认情况下,Spring Boot使用其WebMvcConfigurationSupport的实现,并且会进行很多自动魔术操作,包括查找所有WebMvcConfigurer并使用它们。 Boot已经提供了一种实现,您可以添加更多实现。当您在configureMessageConverters的实现中进入WebMvcConfigurer的转换器列表已经从先前的配置程序中预先填充时,这会导致令人困惑的行为。

这些类型(WebMvcConfigurationSupportWebMvcConfigurer)的接口也非常相似-但第一个不实现另一个。重点是:

支持类搜索配置程序,并使用它们+自行执行操作。

如果您从WebMvcConfigurationSupport扩展过来,那么您将接管配置,尽管有些可用的东西不在WebMvcConfigurer中(例如addDefaultHttpMessageConverters),但是{{ 1}}和EnableWebMvcConfiguration不会发生。

扩展DelegatingWebMvcConfigurationWebMvcConfigurationSupport(不确定一次都有意义)两者都有其有效用法,但是通过扩展支持类,您将接手更多过程,并且损失很多“自以为是的“ Spring Boot功能。