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 博客