Java EE 6和Singletons

任何人都可以解释在Java EE 6应用程序中实现Singleton的完整过程吗? 我假设我不应该以声明静态变量的典型方式创建单例,而应该使用@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"; } ... }