【发布时间】:2020-08-31 19:57:08
【问题描述】:
我有一个服务客户端项目,它在普通的 spring 应用程序中,而不是 spring boot 。它主要用于记录相关的事情。它包含 Interceptor 、 loggingservice impl 类和一些用于记录的模型类。我已将此模块添加为 pom.xml 中的主应用程序的依赖项。我能够在主应用程序的服务层中注入和使用 loggingService bean。
在拦截器中自动连接 loggingService 时得到NullPointerException。该 bean 在拦截器中不可用。但就像我说的那样,它可以在主应用程序中注入和使用。
也无法在拦截器中使用@Value 读取属性。
这是我的拦截器类。
@Component
public class LoggingInterceptor extends HandlerInterceptorAdapter {
@Autowired
LoggingService loggingService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
loggingService.info("Am in prehandle");
return true;
}
}
这是我在主应用程序中注册拦截器的配置类
@Component
public class LoggingConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getLoginInterceptor());
}
@Bean
public LoggingInterceptor getLoginInterceptor() {
return new LoggingInterceptor();
}
}
我的问题与这篇文章Cannot Autowire Service in HandlerInterceptorAdapter 几乎相似,但它的不同之处在于我从另一个模块中引用了拦截器,并且就像他们建议的那样,我尝试从应用程序创建 bean。 但是现在面临的问题是
- 在拦截器中注入 loggingService 时得到
NullPointerException,但它在主应用程序中工作 -
@Value注解也返回 null,无法从属性中读取
【问题讨论】:
-
将
@Component更改为@Configuration。
标签: java spring spring-boot interceptor