【发布时间】:2011-10-04 17:09:29
【问题描述】:
我有一个 JSF2 项目(GlassFish 3.1 上的 Mojarra)。
我有一个 ViewScoped bean,它通过一个实用程序类引用服务,如下所示:
@ManagedBean
@ApplicationScoped
public static class ServicesUtil {
@EJB
UserService userService;
@EJB
EmailService emailService;
/** getters/setters **/
}
和
@ManagedBean
@ViewScoped
public class UserHandler {
public String method() {
ServicesUtil.getUserService().doUserStuff();
return "newPage";
}
}
我的问题是,由于 ServicesUtil 是 ApplicationScoped,这是否意味着整个应用程序的每个服务只有一个实例?这是不好的做法吗?如果操作正确,GlassFish 中的 CDI 是否真的会根据需要创建新实例?
同样,如果将服务注入到 UserHandler 中,应用程序是否会更具可扩展性?
我们添加 ServicesUtil 层的原因是我的一位同事说,当它是 ViewScope 时,他偶尔会遇到让注入在 Handler 中工作的问题。在 ViewScoped bean 中使用 @EJB 会有什么困难吗?
非常感谢任何帮助!
罗伯
【问题讨论】: