访问Service中的请求范围Bean

问题描述 投票:0回答:1

我有一个普通的 bean,它是 (a)

@Scope("request")
或 (b) 通过过滤器/拦截器放置在
HttpServletRequest
中。

如何在

@Service
中访问此 bean,这是一种应用程序范围的单例?

原因是,因为我有一个自定义对象

RequestContext
,其中包含一些请求元数据(主要是来自自定义httpHeaders的信息)。要知道,我将此对象作为参数传递给每个服务上的每个方法,这是很多样板代码。

spring spring-mvc spring-boot spring-bean
1个回答
7
投票

只要将 bean 声明为请求范围,Spring 就会处理剩下的事情。

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public RequestContext requestContext() {
    return new RequestContext();
}

以通常的方式访问 bean,只需自动装配它即可。

@Autowired
private RequestContext requestContext;

Service bean 将是一个单例,但在幕后,RequestContext bean 附加到线程,因此每次调用方法时您都会获得不同的实例。

注意您必须有网络上下文,即运行网络服务器/网络应用程序

© www.soinside.com 2019 - 2024. All rights reserved.