原因:代码自相矛盾了。

拦截器用了 @Component,使用时 却直接new对象,new的不被Spring容器管理。所以service为null了。

很尴尬。

 

/**
      * 自定义拦截规则
      *
      * @param registry
      */
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         // addPathPatterns - 用于添加拦截规则
         // excludePathPatterns - 用户排除拦截
         NewsInterceptor requestLogInterceptor = new NewsInterceptor();
         registry.addInterceptor(requestLogInterceptor).addPathPatterns("/**");
     }@Component
 public class NewsInterceptor implements HandlerInterceptor {    public static final String COOKIE_ID_NAME = "jtn_global_cookie_id";
    @Autowired
     private JtnRequestLogService jtnRequestLogService; 
}

一般都是因为除了在拦截器之外,还需要在拦截器的配置类中,注册拦截器时没有使用spring的bean,而是使用了new创建bean造成的。

 

当然,部分版本也支持以下方式:

@Configurationpublic 
 class WebInterceptorLoader extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter{
 //这里可以自动注入下interceptor     @Autowired
private UserAuthInterceptor userAuthInterceptor;
 @Override 
 public void addInterceptors(InterceptorRegistry registry){//注意这里不要使用 new UserAuthInterceptor() ,否则就会出现拦截器里无法注入service的问题 
 registry.addInterceptor(userAuthInterceptor).addPathPatterns("/**").excludePathPatterns("/components/*/*","/user-auth/quit");
 }
 }