Spring拦截器中@Value无效的解决办法

最近在使用SpringBoot开发项目时,用到了SpringMVC拦截器的功能。鉴于SpringBoot指南中建议使用Java Config的配置方式,拦截器的配置也不例外,从原先的xml配置方式转为了Java Config。

首先贴出拦截器的一种配置方式:

1 @Configuration
2 public class WebMvcConfig extends WebMvcConfigurerAdapter {
3   @Override
4     public void addInterceptors(InterceptorRegistry registry) {
5         super.addInterceptors(registry);
6 
7         registry.addInterceptor(new LogInterceptor()).addPathPatterns("/**");
8     }
9 }

上面的拦截器配置在网上搜索一下,也是随处可见的。拦截器可以正常运作,但是拦截器中@Value注解的属性值为null,没有读取到期望的properties文件中的值。

再看拦截器的另一种配置方式:

 1 @Configuration
 2 public class WebMvcConfig extends WebMvcConfigurerAdapter {
 3   @Bean
 4   public LogInterceptor logInterceptor() {
 5     return new LogInterceptor();
 6   }
 7 
 8   @Override
 9     public void addInterceptors(InterceptorRegistry registry) {
10         super.addInterceptors(registry);
11 
12         registry.addInterceptor(logInterceptor()).addPathPatterns("/**");
13     }
14 }

如果按照上面的配置方式,@Value注解可以成功注入properties文件中的属性值。

思考:第一种方式中,拦截器是手动new出来的,拦截器中的依赖注入并未得到处理;第二种方式,同样是new出来的拦截器,但通过@Bean的声明,表明拦截器是Spring管理的bean,依赖注入工作自然Spring会做处理。

本篇博客的内容源自:https://my.oschina.net/angerbaby/blog/687582?p=1 博客
原文地址:https://www.cnblogs.com/maigy/p/11055418.html