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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM