天天看點

SpringBoot 中使用 HandlerInterceptor 攔截器 @Autowired 注入的 DAO 為空

背景:

今天使用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就不為空了。