我有一个普通的 bean,它是 (a)
@Scope("request")
或 (b) 通过过滤器/拦截器放置在 HttpServletRequest
中。
如何在
@Service
中访问此 bean,这是一种应用程序范围的单例?
原因是,因为我有一个自定义对象
RequestContext
,其中包含一些请求元数据(主要是来自自定义httpHeaders的信息)。要知道,我将此对象作为参数传递给每个服务上的每个方法,这是很多样板代码。
只要将 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 附加到线程,因此每次调用方法时您都会获得不同的实例。
注意您必须有网络上下文,即运行网络服务器/网络应用程序