CDI保留SessionScoped bean的所有Injected树引用?

时间:2014-06-30 01:31:01

标签: dependency-injection cdi java-ee-7 weld

我正在使用JavaEE 7开始一个新项目并声明一个Sessionscoped bean来维护会话中的Web记录用户信息。

{I}命名的UserSessionBean旨在实现轻量级 - 试图避免Weld在会话中保留大量数据。但在某些情况下,我需要获取所有用户信息,因此添加了getUser()方法,该方法必须从JPA查询和检索UserEntity。为了使该方法完成其工作,我需要将@Inject个其他资源放到UserSessionBean上。

我的问题是:这些相关资源将在Weld的UserSessionBean内保存和序列化,直到上下文被销毁为止?

焊接文件说明了这一点:

  

从不在不同的bean之间共享依赖bean的实例   客户或不同的注射点。它完全是一个依赖   一些其他对象的对象。它是对象实例化的   属于被创建,并在它所属的对象被销毁时被销毁   破坏。

这让我觉得在会话生命期间所有SessionBean树都是通过焊接保留的,但是如何保持轻量级SessionBean并在其上使用注入的CDI资源?

1 个答案:

答案 0 :(得分:1)

由于您注入的内容也是CDI bean,因此不是bean本身会被序列化,而是它们的轻量级代理。在反序列化时,代理动态地解析正确的bean,无论它们是什么范围。请参阅CDI1.0 spec 5.4客户端代理部分。因此,您的bean尽可能轻量级。