前言:因为@autowired没有生效,是因为拦截器加载是在Spring Bean创建之前。
解决方法:
拦截器配置类:
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
//在此处,将拦截器注册为一个 Bean
@Bean
public LoginInterceptor getLoginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getLoginInterceptor()) //注册
.addPathPatterns("/specialSubject/**")
.excludePathPatterns("/admin/login/web", "/admin/register/web");
}
}
拦截器类:
@Configuration
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private AdminService adminService;
//逻辑
}
这样,LoginInterceptor 由 @Bean 方法生成,其生命周期由 Spring 管理,Spring 将扫描 @Autowired 目标并注入它们。