Java EE 6和Singletons

时间:2013-08-27 06:40:36

标签: java annotations singleton java-ee-6

任何人都可以解释在Java EE 6应用程序中实现Singleton的完整过程吗?我假设我不应该以声明静态变量的典型方式创建单例,并且应该使用@Singleton注释?我必须这样做吗?

只是宣布它@Singleton的情况而已吗?我必须再去上课吗?

然后我需要做些什么来访问其他类中的单例?

2 个答案:

答案 0 :(得分:9)

  

这只是宣告@Singleton的情况而已吗?

是的!而已!像任何其他Javabean一样设计类。

但请注意,这确实与GoF的Singleton design pattern不同。相反,它恰好是"just create one" pattern。也许这就是你困惑的根源。不可否认,注释名称选择较差,在JSF和CDI中使用了名称@ApplicationScoped


  

然后我需要做些什么来访问其他类中的单例?

与其他所有EJB一样,将其注入@EJB

@EJB
private YourEJB yourEJB;

答案 1 :(得分:3)

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";
  }
  ...
}