【发布时间】:2014-11-07 11:17:30
【问题描述】:
我有一个@SessionScoped cdi bean,用于在我的 Web 应用程序中跟踪用户会话信息。有没有办法从另一个 @ApplicationScoped bean 中找到这个 bean 的所有对象?
【问题讨论】:
标签: object find cdi session-bean
我有一个@SessionScoped cdi bean,用于在我的 Web 应用程序中跟踪用户会话信息。有没有办法从另一个 @ApplicationScoped bean 中找到这个 bean 的所有对象?
【问题讨论】:
标签: object find cdi session-bean
您不能开箱即用。 Java EE 出于安全原因禁止此类事情。
现在您可以想象一种更精细的方法来在您的应用程序范围级别跟踪这些会话 bean。最干净的方法是从 @ApplicationScoped bean 生成它们:
@ApplicationScoped
public class Registry {
private List<SessionData> data = new ArrayList<>;
@Produces
@SessionScoped
public SessionData produceSessionData() {
SessionData ret = new SessionData();
data.add(ret);
return ret;
}
public void cleanSessionData(@Disposes SessionData toClean) {
data.remove(toClean);
}
}
注意@Dispose 方法,当您生成的 bean 结束其生命周期时将调用该方法。一种让您的列表保持最新并避免额外内存使用的便捷方式。
【讨论】: