最近在使用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 博客