使用Spring将HttpServletRequest(从Struts2动作实现ServletRequestAware)注入属性

时间:2016-04-15 18:40:44

标签: spring dependency-injection struts2

我正在使用Struts2和Spring进行依赖注入。

我有Struts操作A,我可以在其中访问HttpServletRequest和其中的一些依赖项B

public class A extends ActionSupport implements ServletRequestAware {
    private B b;
    private HttpServletRequest request;

    @Override
    public void setServletRequest(HttpServletRequest httpServletRequest)
    {
        this.httpServletRequest = httpServletRequest;
    }

    public B getB() {
        return this.b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

还有application-context.xml

<bean id="b" class="com.example.B" />
<bean id="a" class="com.example.actions.A">
    <property name="b" ref="b" />
</bean>

该程序有效,但这是我的问题:依赖B要求HttpServletRequest正常运行。有没有办法让Spring在B中注入它?现在我需要手动将HttpServletRequest对象传递给需要它的方法。

1 个答案:

答案 0 :(得分:1)

  

Spring有没有办法将其注入B?

是的,但B应该是请求范围。

您传递了从Struts获得的请求对象,但您的操作是由Spring管理的,并且您希望使用Spring DI注入HttpServletRequest对象?您只能通过RequestAttributes注入绑定到线程的对象。

只有在Spring可以使用此对象时才能注入该对象。您可以通过任何其他方式获取请求对象,但注入仅适用于相应的范围。