创建一个Spring bean包含ServletRequest属性[英] Creating a Spring bean holds ServletRequest properties

问题描述

我需要创建一个 Spring bean,以便它存储 HttpServletRequest 对象的 serverName、serverPort、contextPath 属性,以便我可以根据需要将此 bean 注入其他 bean.

在我看来,这些属性不会随任何 URI 改变,因此最好将其初始化一次(无论如何,多次传递 request 实例并没有那么昂贵).

问题是,如何将 HttpServletRequest 实例注入到我的配置 bean?我更喜欢基于 xml 的注入.很可能我们需要将它作为 <property> 注入,但我不知道这个 ServletRequest 对象的 name 或 ref 是什么.

目的是将这些变量保存在 bean 中,以便可以从任何 bean 访问它们,并且当我需要获取 serverName 等时,我不需要将 request 对象作为参数传递给许多方法.

任何想法如何创建这样的 bean 及其配置?

推荐答案

您可以使用 request-scoped bean,并将当前请求自动装配到您的 bean 中:

public class RequestHolder {
   private @Autowired HttpServletRequest request;

   public String getServerName() {
      return request.getServerName();
   }
}

然后在 XML 中:

<bean id="requestHolder" class="com.x.RequestHolder" scope="request">
  <aop:scoped-proxy/>
</bean>

然后,您可以将 requestHolder bean 连接到您选择的任何业务逻辑 bean.

注意 <aop:scoped-proxy/> - 这是将请求范围的 bean 注入单例的最简单方法 - 请参阅 Spring docs 了解其工作原理以及如何配置 aop 命名空间.

本文地址:https://www.itbaoku.cn/post/978612.html