我已将表单对象声明为代理作用域并在会话中维护。每当我自动装配表单对象时,代码就完美无缺。如果我想在普通的POJO类中访问war层中的表单对象,那么它就会失败,因为我不是在普通的Java类(非Spring)中自动装配。代码段......
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "session")
class FormA{
}
在Spring控制器中,我能够在SpringController下面检索FormA
@Controller
Class ControllerB{
@Autowired
FormA formA;
}
但我的要求是在普通的Servlet中访问FormA(非Spring类,servlet 2.4实现)。如何在Servlet中检索FormA的实例?
在web.xml中添加了以下侦听器条目,但它返回新的formA但不是会话中的原始formA对象。
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
答案 0 :(得分:2)
如果在Singleton或原型范围的bean中注入了请求,会话和全局会话范围的bean,Spring会将生成的代理注入为依赖项。
当填充代理目标对象时,如果是请求范围,它将存储为threadlocal对象,对于会话范围,它将存储在session中。当在代理上进行调用时,它将委托调用threadlocal / session作用域目标对象。
在您的情况下,如果已填充FormA对象并且已将代理注入控制器,那么您应该能够在该请求中使用此代理来访问FormA对象,前提是它在单线程/会话中。