WebMvcConfigurationSupport和WebMvcConfigurerAdapter之间的混淆

ysj*_*ang 3 java spring spring-mvc

我想在Windows中使用WebMvcConfigurerAdapter添加资源处理程序,但是在Linux中它不起作用,因此我添加了WebMvcConfigurationSupport

经过调试和测试后,我发现将在两个OS中都将创建两个bean,但是WebMvcConfigurerAdapter仅在Windows上执行的重写功能,WebMvcConfigurationSupport而仅在Linux上执行的重写功能。

我找不到原因。这两个配置类如下所示:

@Configuration
public class JxWebAppConfigurer  extends WebMvcConfigurerAdapter {
   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
     registry.addResourceHandler("/**").addResourceLocations("file:"+System.getProperty("user.dir")+"/src/main/webapp/");
     super.addResourceHandlers(registry);
   }
}
Run Code Online (Sandbox Code Playgroud)

这是另一个:

@Configuration
public class JxWebConfiguration extends WebMvcConfigurationSupport {
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/**").addResourceLocations("file:"+System.getProperty("user.dir")+"/src/main/webapp/");
       super.addResourceHandlers(registry);
   }
}
Run Code Online (Sandbox Code Playgroud)

@EnalbeMvc已在主类中添加

dim*_*sli 5

@EnableWebMvc文档中所述

将此注释添加到@Configuration类中,即可从WebMvcConfigurationSupport导入Spring MVC配置。

{..}

要自定义导入的配置,请实现接口WebMvcConfigurer或更可能扩展空方法基类WebMvcConfigurerAdapter并覆盖单个方法

{..}

如果WebMvcConfigurer没有公开一些需要配置的高级设置,请考虑删除@EnableWebMvc批注并直接从WebMvcConfigurationSupport扩展

因此实际上是:

  1. @EnableWebMvc+扩展WebMvcConfigurerAdapter(建议首选)
  2. 直接扩展WebMvcConfigurationSupport(完全控制的备用替代)

(在两种情况下都需要@Configuration