2010-08-18 83 views
0

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

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

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

目的是为了保持这些变量在bean中,使他们不受任何豆访问,我将不再需要request对象传递给许多方法作为参数,当我需要获得serverName

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

+3

我认为这是一个坏主意。为什么Web层以外的层需要知道这些东西?感觉就像你让Web信息泄漏到你的应用程序的其余部分。 – duffymo 2010-08-18 18:02:04

+0

嗯,你可能是对的。 – 2010-08-18 18:06:41

回答

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豆成wheiever您选择的业务逻辑bean。

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

+0

非常感谢!像魔术一样工作。 – 2010-08-19 05:33:39