WebMvcConfigurer的介绍以及两种配置方式

前言

公司的“僵尸项目”(好几年没维护和升级),昨天突然诈尸,出现了一个问题,需要解决,打开代码时,发现项目中用到的WebMvcConfigurerAdapter过期,需要用WebMvcConfigurer来做替换,今天就趁着说一下关于WebMvcConfigurer的两种配置方式。

WebMvcConfigurer介绍

WebMvcConfigurer是一个接口,提供很多自定义的拦截器,例如跨域设置、类型转化器等等。可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用。由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容。

WebMvcConfigurer的两种配置方式

1.JavaBean配置WebMvcConfigurer

采用JavaBean方式我们只需要添加一个web相关配置的类型,并且配置@Configuration注解,将该配置类托管给Spring IOC完成配置,示例代码如下:

**
 * @author damokelisijian866
 * @create 2020/8/11 22:16
 * @desc web配置
 */
@Configuration
public class WebJavaBeanConfiguration {
    
    
    /**
     * 日志拦截器
     */
    @Autowired
    private LogInterceptor logInterceptor;

    /**
     * 实例化WebMvcConfigurer接口
     *
     * @return
     */
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
    
    
        return new WebMvcConfigurer() {
    
    
            /**
             * 添加拦截器
             * @param registry
             */
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
    
    
                registry.addInterceptor(logInterceptor).addPathPatterns("/**");
            }
        };
    }
}

我们通过@Bean注解的返回值来完成WebMvcConfigurer的配置实例化,在WebMvcConfigurer接口实例内调用addInterceptors方法完成添加拦截器配置,跟之前WebMvcConfigurerAdapter方式感觉没事区别,只不过是编码形式有一点变化。

测试拦截器

@Component
public class LogInterceptor implements HandlerInterceptor {
    
    
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    
    
        logger.info("请求路径:{}", request.getRequestURI());
        return true;
    }
}

测试控制器

**
 * @author damokelisijian866
 * @create 2020/8/11 22:20
 * @desc web相关配置类
 */
@RestController
public class TestController {
    
    
    /**
     * 测试拦截地址
     * @return
     */
    @RequestMapping(value = "/index")
    public String index() {
    
    
        return "Success";
    }
}

2 实现类配置WebMvcConfigurer

我们创建一个名为WebConfiguration的配置类并且实现WebMvcConfigurer接口

**
 * @author damokelisijian866
 * @create 2020/8/11 22:25
 * @desc web相关配置类
 */
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
    
    

    /**
     * 日志拦截器
     */
    @Autowired
    private LogInterceptor logInterceptor;

    /**
     * 重写添加拦截器方法并添加配置拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
         registry.addInterceptor(logInterceptor).addPathPatterns("/**");
    }
}

第二种方式有点我们之前使用的感觉,只不过之前是使用的WebMvcConfigurerAdapter抽象类,而现在我们直接使用WebMvcConfigurer接口。

猜你喜欢

转载自blog.csdn.net/damokelisijian866/article/details/107968130
今日推荐