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 ApplicationContext.

session Una singola istanza sarà creata e disponibile durante il ciclo di vita completo di una sessione HTTP.

Valido solo in Spring web-aware ApplicationContext.

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 ApplicationContext.

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" />
Come regola, si dovrebbe preferire usare l’ambito prototype per tutti i bean statful e l’ambito singleton per i bean stateless.
Per usare i fagioli negli scope request, session, application e websocket, è necessario registrare il 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è

  1. application scoped bean è singleton per ServletContext, mentre singleton scoped bean è singleton per ApplicationContext. Si prega di notare che ci possono essere più contesti applicativi per una singola applicazione.
  2. application scoped bean è visibile come attributo ServletContext.

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!!

Was this post helpful?

Facci sapere se ti è piaciuto il post. Solo così possiamo migliorare.
No

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *