2013-08-27 4 views
4

Может ли кто-нибудь объяснить полный процесс внедрения Singleton в приложении Java EE 6? Я предполагаю, что я не должен создавать singleton в типичном способе объявления статической переменной и должен использовать аннотацию @Singleton? Должен ли я это делать так?Java EE 6 и Singletons

Это просто объявление об объявлении @Singleton и все? Должен ли я больше заниматься классом?

Что мне нужно делать, чтобы получить доступ к синглтону в других классах?

ответ

2

Аннотации javax.ejb.Singleton используется, чтобы указать, что класс реализации бизнес-компонента является однопользовательским сеансовым компонентом.

Эта информация предназначена для указания контейнера ejb, а не для создания нескольких экземпляров этого компонента и создания только одного экземпляра. В противном случае это обычный класс бобов. Подробнее здесь:

http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html

Вы не должны создать статическую переменную, и сделать все связанные вещи, чтобы сделать это синглтон. Просто написать нормальный компонент, как указано здесь, и контейнер будет заботиться инстанцировании только объект его:

@Startup 
@Singleton 
public class StatusBean { 
    private String status; 

    @PostConstruct 
    void init { 
    status = "Ready"; 
    } 
    ... 
} 
+0

Это все еще не очень ответить на мой первый вопрос, действительно ли это необходимо? –

+0

@ Просто обновил свой ответ. Вам просто нужно создать нормальный боб, без какой-либо синглтон, статической переменной, конструктора prviate и связанного с ним материала. –

9

Является ли это просто случай объявить его @Singleton и это все?

Да! Это оно! Просто создайте класс, как любой другой джаваб.

Однако обратите внимание, что это действительно не то же самое, что GoF's Singleton design pattern. Вместо этого это точно "just create one" pattern. Возможно, это источник вашей путаницы. По общему признанию, имя аннотации несколько плохо выбрано, в JSF и CDI используется имя @ApplicationScoped.


Что делать то, что нужно сделать, чтобы получить доступ к синглтону в моих других классах?

Так же, как и любой другой EJB, путем введения его в @EJB:

@EJB 
private YourEJB yourEJB; 
Смежные вопросы