前言
公司的“僵尸项目”(好几年没维护和升级),昨天突然诈尸,出现了一个问题,需要解决,打开代码时,发现项目中用到的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接口。