Область действия переменной статического компонента JSF

Итак, я видел этот пост: 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.


person user470714    schedule 01.08.2011    source источник
comment
Если бы static вел себя как человек, не являющийся членом static, как вы думаете, в чем был бы смысл static?   -  person BalusC    schedule 02.08.2011
comment
По сути, если бы я мог ссылаться на переменные статически только в пределах области действия bean-компонента, например, в рамках сеанса конкретного пользователя, это иногда могло бы быть полезно. Просто, например, в реальном сценарии мой класс SomePOJO на самом деле является коллекцией объектов этого класса, но у них есть переменная-член, которая может использоваться всеми объектами только для этого пользователя - было бы здорово, если бы я мог это сделать статический. Но не в том случае, если этот статический элемент будет одинаковым для всех сеансов!   -  person user470714    schedule 02.08.2011


Ответы (1)


JSF Scopes не изменит значение static. Статический по-прежнему означает статический, поэтому независимо от вашей области JSF это значение будет общим для всех экземпляров этого класса в одной и той же виртуальной машине.

person digitaljoel    schedule 01.08.2011