我正在使用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
对象传递给需要它的方法。
答案 0 :(得分:1)
Spring有没有办法将其注入B?
是的,但B
应该是请求范围。
您传递了从Struts获得的请求对象,但您的操作是由Spring管理的,并且您希望使用Spring DI注入HttpServletRequest
对象?您只能通过RequestAttributes
注入绑定到线程的对象。
只有在Spring可以使用此对象时才能注入该对象。您可以通过任何其他方式获取请求对象,但注入仅适用于相应的范围。