原代码
添加拦截器:
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new WebInterceptor());
}
}
拦截器:usersService为null
@Slf4j
public class WebInterceptor implements HandlerInterceptor {
@Autowired
UsersService usersService;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("------------------URL:" + request.getRequestURI() + "--------------------");
.........
return false;
}
}
修改后
添加拦截器:不通过new添加,而是使用注入的方式
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Bean
public WebInterceptor getWebInterceptor(){
return new WebInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getWebInterceptor());
}
// // 也可以这样写
// @Autowired
// WebInterceptor webInterceptor;
//
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(webInterceptor);
// }
}
拦截器:加上@Component注解即可
@Slf4j
@Component
public class WebInterceptor implements HandlerInterceptor {
.........
}
查阅文章大概原因是添加拦截器时new出来的对象并没有交给Spring管理,此时业务类中Spring无法自动注入业务类,处理方式就是将拦截器配置为Bean,Spring就能自动注入了
有错欢迎大神指正,谢谢!!