我正在使用JavaEE 7开始一个新项目并声明一个Sessionscoped bean来维护会话中的Web记录用户信息。
{I}命名的UserSessionBean
旨在实现轻量级 - 试图避免Weld在会话中保留大量数据。但在某些情况下,我需要获取所有用户信息,因此添加了getUser()
方法,该方法必须从JPA查询和检索UserEntity
。为了使该方法完成其工作,我需要将@Inject
个其他资源放到UserSessionBean
上。
我的问题是:这些相关资源将在Weld的UserSessionBean
内保存和序列化,直到上下文被销毁为止?
焊接文件说明了这一点:
从不在不同的bean之间共享依赖bean的实例 客户或不同的注射点。它完全是一个依赖 一些其他对象的对象。它是对象实例化的 属于被创建,并在它所属的对象被销毁时被销毁 破坏。
这让我觉得在会话生命期间所有SessionBean
树都是通过焊接保留的,但是如何保持轻量级SessionBean
并在其上使用注入的CDI资源?
答案 0 :(得分:1)
由于您注入的内容也是CDI bean,因此不是bean本身会被序列化,而是它们的轻量级代理。在反序列化时,代理动态地解析正确的bean,无论它们是什么范围。请参阅CDI1.0 spec的 5.4客户端代理部分。因此,您的bean尽可能轻量级。