前言
  • 拦截器中使用@Autowired时为空,这是因为拦截器加载是在Spring Bean创建之前。
public class PermissionInterceptor implements HandlerInterceptor {

    @Autowired
    private UserService userService; // null
    
}
  • 错误
    SpringBoot - HandlerInterceptor 中 @Autowired 为空_解决方法

解决方法
@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new PermissionInterceptor());
    }
}
  • 修改成:
@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {

    @Bean
    public PermissionInterceptor getPermissionInterceptor() {
        return new PermissionInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getPermissionInterceptor());
    }
}
  • 这样,PermissionInterceptor 由 @Bean 方法生成,其生命周期由 Spring 管理,Spring 将扫描 @Autowired 目标并注入它们。

 
以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
作者:Maggieq8324
本文版权归作者,欢迎转载,转载时保留原作者和文章地址即可。