java - 创建一个 Spring bean 保存 ServletRequest 属性

标签 java spring servlets

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

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

问题是,我该如何注入(inject)HttpServletRequest我的配置 bean 的实例?我更喜欢基于 xml 的注入(inject)。最有可能的是我们需要将其注入(inject)为 <property>但我不知道会是什么nameref为此ServletRequest对象。

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

有什么想法如何创建这样的 bean 及其配置吗?

最佳答案

您可以使用 request-scoped bean 来执行此操作,并将当前请求 Autowiring 到您的 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 注入(inject)到单例中的最简单方法 - 请参阅 Spring docs了解其工作原理以及如何配置 aop命名空间。

关于java - 创建一个 Spring bean 保存 ServletRequest 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3514883/

相关文章:

java - 如何在 Spring Security 中使用动态角色

用于登录的身份验证过滤器和 servlet

java - 通过rest Controller 中的Url获取null ID到后端

mysql - 如何使用camel将数据从mysql传输到oracle

java - 从 Hibernate 4.3.1 切换到 5.0.6,Transaction 消失了

java - Spring RestTemplate 抛出异常 "Broken pipe",同时调用不同的 Rest API 同步

java - 使用相同 Servlet 的多个用户会覆盖彼此的变量吗?

从 servlet 返回到 JSP 时,Javascript 更改消失

java - "java.lang.ArrayIndexOutOfBoundsException"与 System.arraycopy()

java - Log4J application.log 文件没有被写入