背景:
今天使用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就不为空了。