HandlerInterceptor 中注入都是null
时间: 2023-12-30 12:22:48 浏览: 27
在Spring中,HandlerInterceptor是一个拦截器接口,用于拦截请求并在处理程序执行之前或之后执行自定义处理。如果在HandlerInterceptor中注入的bean为null,则可能是由于以下原因之一:
1.未将拦截器类交给Spring容器管理,因此无法注入bean。可以使用@Component注释将拦截器类交给Spring容器管理,如引用所示。
2.拦截器类不是由Spring容器创建的,而是手动创建的。在这种情况下,拦截器类中的任何注入都将无法正常工作。应该使用Spring的依赖注入机制来创建拦截器类。
3.拦截器类中注入的bean的作用域不正确。如果注入的bean的作用域为prototype,则每次请求都会创建一个新的bean实例。在这种情况下,拦截器类中的注入可能会失败。应该将bean的作用域更改为singleton。
4.拦截器类中注入的bean的名称不正确。如果注入的bean的名称与Spring容器中的bean名称不匹配,则注入可能会失败。应该确保bean的名称正确。
相关问题
实现HandlerInterceptor可以自动注入嘛
在实现HandlerInterceptor时,是无法自动注入其他实体的。这是因为拦截器在SpringApplicationContext创建之前就已经加载完成,所以在拦截器中注入实体时,该实体会为null。 你需要手动创建或者获取依赖的实体,并将其传递给拦截器。通常可以通过在配置类中使用@Bean注解来创建拦截器,并在addInterceptors方法中使用registry.addInterceptor()方法添加拦截器实例。比如在WebConfigurer配置类中使用@Bean注解创建MyInterceptor实例,并在addInterceptors方法中添加该拦截器实例。 这样就可以实现拦截器的自动注入。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
HandlerInterceptor拦截器未生效
根据提供的两个引用,可以看出两个拦截器的配置方式不同。引用中的拦截器是通过实现WebMvcConfigurer接口并重写addInterceptors方法来配置的,而引用[2]中的拦截器是通过@Autowired注解和重写addInterceptors方法来配置的。因此,可能是因为在新的工程中没有正确配置拦截器导致拦截器未生效。
以下是可能导致拦截器未生效的原因和解决方法:
1. 拦截器类没有被正确注入:检查拦截器类是否被正确注入,可以使用System.out.println()语句来检查拦截器类是否为null。
2. 拦截器路径配置错误:检查拦截器路径是否正确,可以使用System.out.println()语句来检查拦截器路径是否正确。
3. 拦截器顺序配置错误:如果有多个拦截器,需要按照正确的顺序配置拦截器,可以使用order()方法来指定拦截器的执行顺序。
以下是一种可能的解决方法:
```java
@Configuration
public class MvcSupport implements WebMvcConfigurer {
@Autowired
private AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor).addPathPatterns("/lizzapp/api/**").order(Ordered.HIGHEST_PRECEDENCE);
}
}
```