Spring Boot MVC配置实现方案

配置区别

Spring Boot是支持自动配置的webmvc的,我们来看看它的自动配置类。
在这里插入图片描述
从这个配置类我们可以看出,一但应用上下文中出现WebMvcConfigurationSupport类,自动配置将不再生效,换句话讲就是只有你在WebMvcConfigurationSupport的子类中写那些配置会生效。
另外当我们使用@EnableWebMvc注解时,同样会导致Spring Boot的自动配置失效。我们可以来看看@EnableWebMvc注解的描述
在这里插入图片描述
注解中引入的DelegatingWebMvcConfiguration类其实是WebMvcConfigurationSupport的子类。所以我们使用@EnableWebMvc注解,Spring Boot配置也会失效。
在这里插入图片描述
不过@EnableWebMvc一般并不常用,只有当你的需求是全部自己写SpringMvc的配置,那就要使用@EnableWebMvc来使它的自动配置失效了。
这里需要声明的一点,如果你在项目中使用了WebMvcConfigurationSupport并不代表所有Spring配置都失效了,如果你没有重写对应的方法,spring是有提供默认的配置的。比如下面的getCorsConfigurations方法。
在这里插入图片描述

如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加一个拦截器 ,则可以自己的配置类可以继承 WebMvcConfigurerAdapter 这个类。不过在spring5.0版本后这个类被丢弃了,虽然还可以用,但是看起来不好 = =。
在这里插入图片描述
后续版本推荐使用WebMvcConfigurer接口代替WebMvcConfigurerAdapter类。
WebMvcConfigurer与@EnableWebMvc完全不冲突,可以一起使用,这里大家不要误解。@EnableWebMvc只是会导致Spring Boot自动配置失效,但是不代表WebMvcConfigurer的配置也失效。

总结

  • 覆盖spring mvc部分配置,希望其他的自动配置生效
    • 实现WebMvcConfigurer 接口或 继承WebMvcConfigurerAdapter。推荐使用WebMvcConfigurer。
  • 覆盖spring mvc全部自动配置,采用自己手动配置
    • @EnableWebMvc + 自己写的mvc配置
    • @EnableWebMvc + 自己写的mvc配置 + 实现WebMvcConfigurer接口(为了采用系统的配置类)
    • @EnableWebMvc + 自己写的mvc配置 + 继承WebMvcConfigurationSupport并重写方法(为了采用系统的配置类)
    • 继承WebMvcConfigurationSupport并重写方法(为了采用系统的配置方案)

额外内容

我们使用spring 中的拦截器时,经常要采用WebMvcConfigurationSupport或其他的方法将拦截器添加到spring 容器,有的时候拦截器中的注入的属性会出现不成功的问题(比如向拦截器中注入一个service)。只要采用下面👇这种方式即可解决此问题。

public class UserInterceptor extends HandlerInterceptorAdapter {
	//使StaffQueryService注入进来
    @Autowired  
    private StaffQueryService staffQueryService;
    ....
}    
@Bean
    public UserInterceptor userInterceptor(){
        return new UserInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        List<String> excludes = Lists.newArrayList("/sso/**","/api","/api-docs","/api-docs/**","/unlogin/**","/swagger-ui.html","/webjars/**","/v2/api-docs","/swagger-resources/**", "/system/version.htm","/system/config/*");
       registry.addInterceptor(userInterceptor()).excludePathPatterns(excludes);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值