2013-03-04 78 views
1

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

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

在春天控制器,我能够在下面SpringController

@Controller 
Class ControllerB{ 
@Autowired 
FormA formA; 
} 

检索备考但我的要求是进入备考中平原的Servlet(非Spring类,Servlet 2.4的实现)。如何在Servlet中检索FormA的实例?

已经在web.xml中的listener条目下面添加了,但它返回新的formA,但不是原来的sessionA对象。

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

回答

2

如果请求,会话和全局会话范围豆在辛格尔顿注入或原型作用域bean,Spring会注入生成的代理的依赖。

当代理的目标对象被填充时,在请求范围的情况下,它将被存储为threadlocal对象,并且对于会话范围它将被存储在session中。当在代理上进行调用时,它将调用委托给threadlocal /会话范围的目标对象。

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