【SpringBoot】攔截器使用@Autowired注入介面為null解決方法
阿新 • • 發佈:2018-12-16
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即可注入成功。