原因:代码自相矛盾了。
拦截器用了 @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");
}
}