【SpringBoot】拦截器使用@Autowired注入接口为null解决方法

最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个DAO,准备下面做相应操做,拦截器代码:spring

public class TokenInterceptor implements HandlerInterceptor { @Autowired private ITokenDao tokenDao; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { } ... }

配置信息代码:ide

@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。spa

缘由code

形成null的缘由是由于拦截器加载是在springcontext建立以前完成的,因此在拦截器中注入实体天然就为null。blog

解决token

解决方法就是让bean提早加载,将配置信息修改成以下:get

@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便可注入成功。io

相关文章
相关标签/搜索