Nel framework Spring, possiamo creare dei bean in 6 scopes inbuilt spring bean e puoi anche definire il tuo bean scope personalizzato. Di questi sei scope, quattro sono disponibili solo se si usa un ApplicationContext
web-aware. singleton
e prototype
gli scope sono disponibili in qualsiasi tipo di container 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
Spring Bean Scopes Type
In Spring, gli scope possono essere definiti utilizzando l’annotazione @Scope di Spring Bean. Elenchiamo rapidamente tutti e sei gli scopi dei bean incorporati disponibili per l’uso nel contesto dell’applicazione Spring. Questi stessi ambiti si applicano anche all’ambito bean di Spring Boot.
Scope | Descrizione |
---|---|
singleton (default) |
Singola istanza dell’oggetto bean per contenitore spring IoC |
prototype |
Opposto al singleton, produce una nuova istanza ogni volta che un bean viene richiesto. |
request |
Una singola istanza sarà creata e disponibile durante il ciclo di vita completo di una richiesta HTTP.
Valido solo in Spring web-aware |
session |
Una singola istanza sarà creata e disponibile durante il ciclo di vita completo di una sessione HTTP.
Valido solo in Spring web-aware |
application |
Una singola istanza sarà creata e disponibile durante il ciclo di vita completo di ServletContext . |
websocket |
Una singola istanza sarà creata e disponibile durante il ciclo di vita completo di WebSocket .
Valido solo in Spring web-aware |
1.1. ambito singleton
singleton
è l’ambito bean predefinito nel contenitore Spring. Dice al contenitore di creare e gestire solo un’istanza della classe bean, per contenitore. Questa singola istanza è memorizzata in una cache di tali fagioli singleton, e tutte le successive richieste e riferimenti per quel fagiolo nominato restituiscono l’istanza nella cache.
Esempio di fagiolo singleton scope usando la configurazione Java –
Esempio di fagiolo singleton scope usando la configurazione XML –
1.2. scope prototipo
prototype
scope comporta la creazione di una nuova istanza del bean ogni volta che il codice dell’applicazione fa una richiesta per il bean.
Si deve sapere che i metodi di distruzione del ciclo di vita del bean non vengono chiamati prototype
scoped beans, solo i metodi di callback di inizializzazione vengono chiamati. Quindi, come sviluppatore, sei responsabile della pulizia delle istanze dei bean scoped prototipo e di qualsiasi risorsa in loro possesso.
Esempio di configurazione Java dello scope prototype bean –
@Component@Scope("prototype")public class BeanClass {}
Esempio di configurazione XML dello scope prototype bean –
<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
prototype
per tutti i bean statful e l’ambito singleton
per i bean stateless.RequestContextListener
o RequestContextFilter
.1.3. ambito di richiesta
Nell’ambito request
, il contenitore crea una nuova istanza per ogni richiesta HTTP. Quindi, se il server sta attualmente gestendo 50 richieste, allora il contenitore può avere al massimo 50 istanze individuali della classe bean. Qualsiasi cambiamento di stato di un’istanza, non sarà visibile alle altre istanze. Queste istanze vengono distrutte non appena la richiesta viene completata.
Esempio di configurazione Java di request bean scope –
@Component@Scope("request")public class BeanClass {}//or@Component@RequestScopepublic class BeanClass {}
Esempio di configurazione XML di request bean scope –
<bean class="com.howtodoinjava.BeanClass" scope="request" />
Leggi tutto: Come funzionano i server web?
1.4. ambito di sessione
Nell’ambito session
il contenitore crea una nuova istanza per ogni sessione HTTP. Quindi, se il server ha 20 sessioni attive, allora il contenitore può avere al massimo 20 istanze individuali della classe bean. Tutte le richieste HTTP entro la durata della singola sessione avranno accesso alla stessa singola istanza di bean in quell’ambito di sessione.
Ogni cambiamento di stato di un’istanza non sarà visibile alle altre istanze. Queste istanze vengono distrutte non appena la sessione viene distrutta/fine sul server.
esempio di configurazione Java dell’ambito dei bean di sessione –
@Component@Scope("session")public class BeanClass {}//or@Component@SessionScopepublic class BeanClass {}
esempio di configurazione XML dell’ambito dei bean di sessione –
<bean class="com.howtodoinjava.BeanClass" scope="session" />
1.5. application scope
Nell’ambito application
, il contenitore crea un’istanza per ogni runtime dell’applicazione web. È quasi simile all’ambito singleton
, con solo due differenze, cioè
-
application
scoped bean è singleton perServletContext
, mentresingleton
scoped bean è singleton perApplicationContext
. Si prega di notare che ci possono essere più contesti applicativi per una singola applicazione. -
application
scoped bean è visibile come attributoServletContext
.
esempio di configurazione Java dello scope di un bean applicativo –
@Component@Scope("application")public class BeanClass {}//or@Component@ApplicationScopepublic class BeanClass {}
esempio di configurazione XML dello scope di un bean applicativo –
<bean class="com.howtodoinjava.BeanClass" scope="application" />
1.6. ambito websocket
Il protocollo WebSocket permette la comunicazione bidirezionale tra un client e un host remoto che ha optato per la comunicazione con il client. Il protocollo WebSocket fornisce una singola connessione TCP per il traffico in entrambe le direzioni. Questo è particolarmente utile per applicazioni multi-utente con editing simultaneo e giochi multi-utente.
In questo tipo di applicazioni web, HTTP è usato solo per l’handshake iniziale. Il server può rispondere con lo stato HTTP 101 (cambio di protocollo) se accetta la richiesta di handshake. Se l’handshake ha successo, il socket TCP rimane aperto e sia il client che il server possono usarlo per inviarsi messaggi a vicenda.
Esempio di configurazione Java dell’ambito del bean websocket –
@Component@Scope("websocket")public class BeanClass {}
Esempio di configurazione XML dell’ambito del bean websocket –
<bean class="com.howtodoinjava.BeanClass" scope="websocket" />
Si prega di notare che websocket
gli scoped beans sono tipicamente singleton e vivono più a lungo di ogni singola sessione WebSocket.
Custom thread scope
Spring fornisce anche uno scope non predefinito thread
usando la classe SimpleThreadScope
. Per usare questo scope, è necessario registrarlo al contenitore usando la classe CustomScopeConfigurer
.
Ogni richiesta per un bean restituirà la stessa istanza all’interno dello stesso thread.
Esempio di configurazione Java dell’ambito del thread bean –
@Component@Scope("thread")public class BeanClass {}
Esempio di configurazione XML dell’ambito del thread bean –
<bean class="com.howtodoinjava.BeanClass" scope="thread" />
Summary
Il framework Spring ha fornito sei ambiti di spring bean e le istanze hanno diversi cicli di vita in ogni ambito. Come sviluppatore, dobbiamo scegliere l’ambito di qualsiasi bean gestito dal contenitore con saggezza. Inoltre, dobbiamo prendere decisioni sagge quando fagioli con scopi diversi si riferiscono l’un l’altro.
Prova a ricordare tutte le informazioni di cui sopra per rispondere a qualsiasi domanda di intervista su spring bean.
Happy Learning!!