我需要创建一个Spring bean,以便它存储HttpServletRequest对象的serverName
,serverPort
,contextPath
属性,以便我可以根据需要将此bean注入其他bean。
在我看来,这些属性不会随任何URI而改变,因此最好初始化一次(无论如何,多次传递request
实例并不是那么昂贵)。
问题是,如何将HttpServletRequest
实例注入我的配置bean?我更喜欢基于xml的注射。我们很可能需要将其作为<property>
注入,但我不知道此name
对象的ref
或ServletRequest
是什么。
目的是将这些变量保存在bean中,以便可以从任何bean访问它们,当我需要获取{{1时,我不需要将request
对象作为参数传递给许多方法等等。
如何创建这样的bean及其配置?
答案 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
命名空间。