我需要创建一个 Spring bean 以便它存储 serverName
, serverPort
, contextPath
HttpServletRequest 对象的属性,以便我可以根据需要将此 bean 注入(inject)到其他 bean。
在我看来,这些属性不会随任何 URI 而改变,因此最好初始化一次(无论如何,多次传递 request
实例并不那么昂贵)。
问题是,我该如何注入(inject)HttpServletRequest
我的配置 bean 的实例?我更喜欢基于 xml 的注入(inject)。最有可能的是我们需要将其注入(inject)为 <property>
但我不知道会是什么name
或ref
为此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/