1

我已将表单对象声明为代理范围并在会话中维护。每当我自动装配表单对象时,代码都可以正常工作。如果我想在普通 POJO 类中访问 war 层中的表单对象,那么它会失败,因为我不是在普通 Java 类(非 Spring)中自动装配。代码片段...

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "session")
class FormA{
}

在 Spring 控制器中,我可以在 SpringController 下面检索 FormA

@Controller
Class ControllerB{
@Autowired
FormA formA;
}

但我的要求是在普通 Servlet(非 Spring 类,servlet 2.4 实现)中访问 FormA。如何在 Servlet 中检索 FormA 的实例?

在 web.xml 中添加了以下侦听器条目,但它返回新的 formA 而不是会话中的原始 formA 对象。

<listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
</listener>
4

1 回答 1

2

如果请求、会话和全局会话范围的 bean 被注入到 Singleton 或原型范围的 bean 中,Spring 将注入一个生成的代理作为依赖项。

填充代理的目标对象时,在请求范围的情况下,它将存储为线程本地对象,对于会话范围,它将存储在会话中。在代理上进行调用时,它将调用委托给线程本地/会话范围的目标对象.

在您的情况下,如果 FormA 对象已被填充并且代理已被注入控制器,那么您应该能够在该请求中使用此代理来访问 FormA 对象,前提是它在单线程/会话中。

于 2013-03-18T11:38:50.787 回答