Olá pessoal, hoje iremos entender cada escopo do controlador ManagedBean que de forma sucinta é uma classe Java Beans que delega funções a camada View.
Podemos dizer que para uma aplicação web usar um objeto bean que injeta outra classe de bean, o bean precisa ser capaz de manter o estado durante a interação do usuário com o aplicativo. E a maneira de definir esse estado é dar um escopo ao bean. Por isso falamos que o escopo do ManagedBean define um comportamento para telas e sistemas que podem ser definidos por meio de anotações do pacote javax.faces.bean.
Assim, os principais escopos do ManagedBean compreendem as anotações @RequestScoped, @SessionScoped, @ApplicationScoped, @ViewScoped. É importante observar que cada escopo tem uma função específica e desse modo cada uma dessas funções resolve um tipo de problema.
Como exemplo, existem casos em que é necessário a utilização de algum escopo de maior duração, que exigem por exemplo, o uso de uma @SessionScoped. Em aplicações onde é necessário o armazenamento de dados que serão utilizados de forma recorrente durante o tempo de sessão, é recomendado o uso de uma session escope.
Agora que você já está contextualizado acerca dos escopos do ManagedBean, e porque utilizá-los, vamos entender um pouco mais a função dos escopos mais utilizados.
ESCOPOS
Sendo utilizado com menor frequência o @NoneScoped Indica que o escopo não está definido para a aplicação. O que significa que o objeto bean somente será instanciado a cada vez que for referenciado.
O @RequestScoped é um escopo padrão dos Managed Beans. Ele sobrevive apenas a um ciclo de submissão. Desse modo precisa ser referenciado em apenas uma única requisição HTTP (ao servidor) para ser iniciado, terminando quando a resposta é enviada de volta ao cliente. Por isso dizemos que ele tem um ciclo de vida curto.
E por ter o menor tempo de vida entre os escopos, não é recomendado em casos onde seja necessário manter os dados durante um longo período ou mesmo para compartilhar dados entre sessões de usuários.
Com o @ViewScoped a instância permanece ativa até que o usuário navegue para uma próxima página. Em outras palavras significa que os dados são mantidos durante quantas requisições forem necessárias, desde que todas sejam realizadas para a mesma view.
Já a @SessionScoped por sua vez, mantém a instância durante diversas requisições e até mesmo navegações entre páginas, ou até que a sessão do usuário seja invalidada ou o tempo limite seja atingido. Cada usuário possui uma sessão única de navegação, portanto, os objetos não são compartilhados entre os usuários.
Desse modo podemos dizer que uma session escope mantem a interação do usuário com a aplicação por meio de várias solicitações HTTP. Ou ainda de forma mais simplificada que o escopo de sessão permanece ativo em várias requisições HTTP (ao servidor), enquanto durar a sessão do usuário.
A @ApplicationScoped mantém toda a instância durante todo o tempo de execução da aplicação. Desse modo diz-se da sessão de aplicação que ela tem um estado que é compartilhado entre todas as interações dos usuários com a aplicação.
EM POUCOS PALAVRAS
Ressalto mais uma vez o quanto é importante que você de fato se dedique a compreender estes conceitos. É a partir de uma base sólida que podemos edificar nosso conhecimento com consistência e segurança para atuar no dia a dia. Nos vemos nos próximos tutoriais onde iremos ver na prática como cada um desses escopos funcionam.