В Java EE 7, в чем цель и использование аннотации @Named здесь? Даже без этого контейнер должен иметь возможность открыть этот компонент во время выполнения, не так ли?Какая цель @Named аннотации
Также, как насчет @ Синглтона? Если разработчикам не нужно создавать несколько экземпляров в приложении, нет необходимости использовать singleton здесь, правильно?
@Singleton
@Named
public class Counter {
private int a = 1;
private int b = 1;
public void incrementA() {
a++;
}
public void incrementB() {
b++;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
}
Я сделал два теста:
1) Если я удалить @Singleton, когда я нажимаю incrementA() или incrementB(), приращения neighter на 1. Значение остановился здесь 1.
2) Если я удаляю аннотацию @Named, она сообщает об исключении нулевого указателя.
Я изучаю Java EE и не совсем понимаю это поведение.
EDIT (как используются бобы):
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<body>
<ui:composition template="/template.xhtml">
<ui:define name="title">
Helloworld EJB 3.1 Singleton Quickstart
</ui:define>
<ui:define name="body">
<p>
This example demonstrates a singleton session bean that maintains state for 2 variables: <code>a</code> and <code>b</code>.
</p>
<p>
A counter is incremented when you click on the
link to the variable name. If you close and restart your browser, or
if you have multiple browsers, you can see that the counter always
increments the last value. These values are maintained until you
restart the application. To test the singleton bean, click on either
"Increment" button below.
</p>
<table>
<tr>
<h:form>
<td><b>Counter A</b></td><td><h:commandButton value="Increment" action="#{counter.incrementA}" /></td><td>#{counter.a}</td>
</h:form>
</tr>
<tr>
<h:form>
<td><b>Counter B</b></td><td><h:commandButton value="Increment" action="#{counter.incrementB}" /></td><td>#{counter.b}</td>
</h:form>
</tr>
</table>
</ui:define>
</ui:composition>
~
Какова точная причина того, что после удаления @Singleton счетчик не работает? Значения счетчика остаются равными 1, не увеличиваются. – marlon
Я думаю, что это не значит, что значение остается таким же, но вы получаете новый экземпляр каждый раз, когда вы получаете доступ к вашему webapp. К сожалению, я не вижу, в каком контексте используется класс. –
смотрите, как он используется. Очень просто. Это простая демонстрация, демонстрирующая концепцию singleton session bean. Вы имеете в виду каждый раз, когда я нажимаю «Приращение», у меня появился новый экземпляр? Но значение по умолчанию равно 1, даже если я нажимаю только один раз, новый экземпляр должен получить значение 2? – marlon