创建Spring bean包含ServletRequest属性

时间:2010-08-18 17:34:31

标签: java spring servlets

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

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

问题是,如何将HttpServletRequest实例注入我的配置bean?我更喜欢基于xml的注射。我们很可能需要将其作为<property>注入,但我不知道此name对象的refServletRequest是什么。

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用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命名空间。