【SpringBoot】攔截器使用@Autowired註入接口為null解決方法
阿新 • • 發佈:2018-03-12
res 自定義 row 攔截 request spa mvcc gist private
最近使用SpringBoot的自定義攔截器,在攔截器中註入了一個DAO,準備下面作相應操作,攔截器代碼:
public class TokenInterceptor implements HandlerInterceptor { @Autowired private ITokenDao tokenDao; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { } ... }
配置信息代碼:
@Configuration public class InterceptorConfig extends WebMvcConfigurerAdapter { /** * * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new TokenInterceptor()) .excludePathPatterns("/user/login"); super.addInterceptors(registry); } }
看似沒有問題,但運行結果發現Token攔截器中註入的DAO為null。
原因
造成null的原因是因為攔截器加載是在springcontext創建之前完成的,所以在攔截器中註入實體自然就為null。
解決
解決方法就是讓bean提前加載,將配置信息修改為如下:
@Configuration public class InterceptorConfig extends WebMvcConfigurerAdapter { @Bean public HandlerInterceptor getTokenInterceptor(){return new TokenInterceptor(); } /** * * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getTokenInterceptor()) .excludePathPatterns("/user/login"); super.addInterceptors(registry); } }
重新運行DAO即可註入成功。
【SpringBoot】攔截器使用@Autowired註入接口為null解決方法