背景:
今天使用SpringBoot的自定義攔截器,需要在攔截器中注入一個DAO,運作的時候出現異常,DAO為null,注解也都加了,就是注入不進去。
@Component
public class MyInterceptor implements HandlerInterceptor {
@Autowired
private UserLoginDAO userLoginDAO;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
}
}
原因:
造成DAO為null的原因是攔截器加載是在springcontext建立之前完成的,是以在攔截器中注入實體自然就為null。
解決:
解決方法就是讓bean提前加載,将配置資訊修改為如下:@Configuration public class InterceptorConfig extends WebMvcConfigurerAdapter { @Bean public HandlerInterceptor getMyInterceptor(){ return new MyInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration interceptor = registry.addInterceptor(getMyInterceptor()); // 攔截所有 interceptor.addPathPatterns("/**") } }
再次運作的時候DAO就不為空了。