Na estrutura da Primavera, podemos criar feijões em 6 escopos de feijão de Primavera embutidos e também pode definir o seu escopo personalizado de feijão. Destes seis âmbitos, quatro só estão disponíveis se utilizar um web-aware ApplicationContext
singleton
e prototype
os âmbitos estão disponíveis em qualquer tipo de recipientes IOC.
Table of Contents1. Spring Bean Scope Types 1.1. singleton scope 1.2. prototype scope 1.3. request scope 1.4. session scope 1.5. application scope 1.6. websocket scope2. Custom thread scope3. Summary
Escopos de Feijão Primaveril Tipo
Na Primavera, o âmbito pode ser definido utilizando a anotação do feijão primaveril @Scope. Vamos listar rapidamente todos os seis âmbitos de feijão embutidos disponíveis para utilização no contexto de aplicação de primavera. Estes mesmos escopos aplicam-se também ao escopo do feijão de arranque de molas.
Scope | |
---|---|
singleton (por defeito) |
Contentor único de feijão por mola de IoC |
prototype |
Opposite a singleton, produz uma nova instância cada vez que um feijão é solicitado. |
request |
Uma única instância será criada e disponível durante o ciclo de vida completo de um pedido HTTP.
Válido apenas na Primavera da Web |
session |
Uma única instância será criada e estará disponível durante o ciclo de vida completo de uma Sessão HTTP.
Válido apenas na Primavera sensível à web |
application |
Uma única instância será criada e estará disponível durante o ciclo de vida completo de ServletContext .
Só válido em web-aware Primavera |
websocket |
Uma única instância será criada e estará disponível durante todo o ciclo de vida de WebSocket .
Válido apenas na Primavera sensível à web |
1.1. escopo de um botão
singleton
é o escopo padrão de feijão em contentor de Primavera. Diz ao contentor para criar e gerir apenas uma instância da classe de feijão, por contentor. Esta instância única é armazenada numa cache de tais feijões singleton, e todos os pedidos e referências subsequentes para aquele feijão nomeado devolvem a instância em cache.
Exemplo de feijão singleton scope usando configuração Java –
Exemplo de feijão singleton scope usando configuração XML –
1.2. protótipo de escopo
prototype
escopo resulta na criação de uma nova instância de feijão cada vez que um pedido de feijão é feito por código de aplicação.
deve saber que os métodos do ciclo de vida do feijão de destruição não são chamados prototype
feijão escopado, apenas os métodos de chamada de retorno de inicialização são chamados. Assim, como programador, é responsável pela limpeza de instâncias de feijão com protótipo e de qualquer recurso aí existente.
Java config example of prototype bean scope –
@Component@Scope("prototype")public class BeanClass {}
XML config example of prototype bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
prototype
espaço para todos os feijões apátridas e o singleton
espaço para os feijões apátridas.RequestContextListener
ou RequestContextFilter
.1.3. âmbito do pedido
Em request
âmbito, o contentor cria uma nova instância para cada pedido HTTP. Assim, se o servidor estiver actualmente a tratar 50 pedidos, então o contentor pode ter no máximo 50 instâncias individuais de classe de feijão. Qualquer mudança de estado para uma instância, não será visível para outras instâncias. Estas instâncias são destruídas assim que o pedido é concluído.
Java config example of request bean scope –
@Component@Scope("request")public class BeanClass {}//or@Component@RequestScopepublic class BeanClass {}
XML config example of request bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="request" />
p>Reading More: Como funcionam os servidores web?
1.4. âmbito da sessão
Em session
âmbito, o contentor cria uma nova instância para cada sessão HTTP. Assim, se o servidor tiver 20 sessões activas, então o contentor pode ter no máximo 20 instâncias individuais de classe de feijão. Todos os pedidos HTTP dentro de uma única sessão terão acesso à mesma instância individual de feijão no âmbito dessa sessão.
Ainda mudança de estado para uma instância, não será visível para outras instâncias. Estas instâncias são destruídas assim que a sessão é destruída/fecha no servidor.
Java config example of session bean scope –
@Component@Scope("session")public class BeanClass {}//or@Component@SessionScopepublic class BeanClass {}
XML config example of session bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="session" />
1.5. âmbito de aplicação
In application
âmbito, recipiente cria uma instância por tempo de execução da aplicação web. É quase semelhante a singleton
escopo, com apenas duas diferenças, ou seja
-
application
o feijão escopado é singleton porServletContext
, enquantosingleton
o feijão escopado é singleton porApplicationContext
. Note-se que podem existir múltiplos contextos de aplicação para uma única aplicação. -
application
scoped bean is visible as aServletContext
attribute.
Java config example of application bean scope –
@Component@Scope("application")public class BeanClass {}//or@Component@ApplicationScopepublic class BeanClass {}
XML config example of application bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="application" />
1.6. websocket scope
O WebSocket Protocol permite a comunicação bidireccional entre um cliente e um anfitrião remoto que tenha optado por comunicar com o cliente. O WebSocket Protocol proporciona uma única ligação TCP para tráfego em ambos os sentidos. Isto é especialmente útil para aplicações multi-utilizador com edição simultânea e jogos multi-utilizador.
Neste tipo de aplicações web, o HTTP é utilizado apenas para o aperto de mão inicial. O servidor pode responder com o estado HTTP 101 (protocolos de comutação) se estiver de acordo – ao pedido de aperto de mão. Se o aperto de mão tiver êxito, a tomada TCP permanece aberta e tanto o cliente como o servidor podem utilizá-la para enviar mensagens um ao outro.
Java config example of websocket bean scope –
@Component@Scope("websocket")public class BeanClass {}
XML config example of websocket bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="websocket" />
Por favor note que websocket
os feijões escopados são tipicamente singletons e vivem mais tempo do que qualquer sessão individual do WebSocket.
Escopo da rosca personalizada
Mola também fornece um não por defeito thread
scopo usando a classe SimpleThreadScope
. Para utilizar este âmbito, é necessário registá-lo para contentor utilizando CustomScopeConfigurer
class.
Todos os pedidos de um feijão retornarão a mesma instância dentro do mesmo fio.
Java config example of thread bean scope –
@Component@Scope("thread")public class BeanClass {}
XML config example of thread bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="thread" />
Summary
Spring framework has provided six spring bean scopes and instances have different lifecycle span within each scope. Como revelador, temos de escolher sabiamente o âmbito de qualquer feijão gerido em contentor. Além disso, devemos tomar decisões sensatas quando feijões com diferentes âmbitos de aplicação se referirem uns aos outros.
Tente lembrar-se de todas as informações dadas acima para responder a qualquer pergunta de entrevista de âmbito primaveril.
Aprendizagem Feliz !!