Итак, я видел этот пост: JSF - сеанс bean-компонент с ограниченной областью действия, совместно используемый браузерами на разных компьютерах
Но это был вопрос двухлетней давности, поэтому я не знаю, были ли какие-либо обновления в мире JSF с тех пор, и у меня также есть несколько более конкретных случаев, по которым я хотел бы получить разъяснения. По сути, я хотел бы знать, как статические переменные области обрабатываются в bean-компонентах с разными областями. Например:
@ManagedBean
@ApplicationScoped
public class ApplicationBean{
static private int someStaticInt=0;
...
}
Поскольку этот bean-компонент относится к области приложения, я бы полностью ожидал, что someStaticInt будет совместно использоваться всеми пользователями приложения, т. е. пользователь A устанавливает значение 3, все пользователи отныне будут видеть это значение как 3. Поправьте меня, если я ошибаюсь.
Но как насчет этого сценария:
@ManagedBean
@ViewScoped
public class ViewScopeBean{
static private int staticInt = 0;
private SomePOJO myClass;
...
public void someAction(){
SomePOJO.memberStaticInt++;
...
}
}
...
public SomePOJO{
static private int memberStaticInt = 0;
...
}
Теперь этот bean-компонент ViewScoped, поэтому для каждого пользователя приложения существует отдельный экземпляр. Но как насчет этого статического int? Если я увеличу это, будет ли это только внутри МОЕГО экземпляра Бина, или оно будет увеличено для всех пользователей. Кроме того, как насчет этого объекта-члена, myClass? Он не объявлен статическим в bean-компоненте, но сам имеет статический член. Если я запускаю someAction, будет ли memberStaticInt увеличиваться для всех пользователей или только для пользователя, использующего этот экземпляр Bean?
Наконец, мне было бы интересно узнать, применима ли любая такая логика в приведенных выше случаях к bean-компонентам RequestScoped.
static
вел себя как человек, не являющийся членомstatic
, как вы думаете, в чем был бы смыслstatic
? - person BalusC   schedule 02.08.2011