谁能解释在 Java EE 6 应用程序中实现单例的完整过程?我假设我不应该以声明静态变量的典型方式创建单例,而应该使用@Singleton
注释?我必须这样做吗?
它只是一个声明它的情况@Singleton
,就是这样吗?我必须再去上课吗?
然后我需要做什么来访问我其他类中的单例?
谁能解释在 Java EE 6 应用程序中实现单例的完整过程?我假设我不应该以声明静态变量的典型方式创建单例,而应该使用@Singleton
注释?我必须这样做吗?
它只是一个声明它的情况@Singleton
,就是这样吗?我必须再去上课吗?
然后我需要做什么来访问我其他类中的单例?
这只是声明@Singleton 的一个例子吗?
是的!而已!只需像任何其他 Javabean 一样设计该类。
但是请注意,这确实与 GoF 的Singleton 设计模式不同。相反,它正是“只创建一个”模式。也许这就是你困惑的根源。不可否认,注解名称选择得有些差,在 JSF 和 CDI 中@ApplicationScoped
使用了该名称。
然后我需要做什么来访问我其他类中的单例?
与其他所有 EJB 一样,将其注入为@EJB
:
@EJB
private YourEJB yourEJB;
该javax.ejb.Singleton
注解用于指定企业 bean 实现类是单例会话 bean。
这个信息是告诉ejb容器,不要创建这个bean的多个实例而只创建一个单例实例。否则它只是一个普通的 bean 类。在这里阅读更多:
http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html
您不必创建静态变量,也不必做所有相关的事情来使其成为单例。只需编写一个此处提到的普通 bean,容器将负责实例化它的唯一对象:
@Startup
@Singleton
public class StatusBean {
private String status;
@PostConstruct
void init {
status = "Ready";
}
...
}