In Spring framework kunnen we bonen maken in 6 ingebouwde Spring Bean scopes en je kunt ook je eigen bean scopes definiëren. Van deze zes scopes zijn er vier alleen beschikbaar als je een web-aware ApplicationContext gebruikt. singleton en prototype scopes zijn beschikbaar in elk type IOC container.

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 kan de scope gedefinieerd worden met de Spring Bean @Scope annotatie. Laten we snel een lijst van alle zes ingebouwde bonen scopes beschikbaar voor gebruik in de lente applicatie context. Dezelfde scopes zijn ook van toepassing op spring boot bean scopes.

Scope Description
singleton (standaard) Een instantie van een boonobject per IoC-container van Spring
prototype Tegenovergestelde van singleton, produceert het een nieuwe instantie telkens wanneer een boon wordt opgevraagd.
request Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van een HTTP-verzoek.

Alleen geldig in web-aware Spring ApplicationContext.

session Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van een HTTP-sessie.

Alleen geldig in web-aware Spring ApplicationContext.

application Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van ServletContext.

Alleen geldig in web-aware Spring ApplicationContext.

websocket Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van WebSocket.

Alleen geldig in web-aware Spring ApplicationContext.

1.1. singleton scope

singleton is de standaard bean scope in Spring Container. Het vertelt de container om slechts één instantie van een bonenklasse te maken en te beheren, per container. Deze enkele instantie wordt opgeslagen in een cache van dergelijke singleton bonen, en alle volgende verzoeken en verwijzingen voor die genoemde boon retourneren de cache instantie.

Voorbeeld van singleton scope boon met behulp van Java config –

Voorbeeld van singleton scope boon met behulp van XML config –

1.2. prototype scope

prototype scope resulteert in de creatie van een nieuwe bean instantie elke keer dat een verzoek voor de bean wordt gedaan door applicatie code.

Je moet weten dat de methoden voor de levenscyclus van de vernietiging van de boon niet worden aangeroepen prototype scoped bonen, alleen initialisatie callback methoden worden aangeroepen. Dus als ontwikkelaar ben je verantwoordelijk voor het opruimen van prototype-scoped boneninstanties en alle middelen die ze bevatten.

Java config voorbeeld van prototype bean scope –

@Component@Scope("prototype")public class BeanClass {}

XML config voorbeeld van prototype bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
In het algemeen, zou je de prototype scope moeten gebruiken voor alle stateful beans en de singleton scope voor stateless beans.
Om beans in de request, session, application en websocket scopes te gebruiken, moet je de RequestContextListener of RequestContextFilter registreren.

1.3. request scope

In request scope, creëert de container een nieuwe instantie voor elk HTTP verzoek. Dus, als de server op dit moment 50 aanvragen verwerkt, dan kan de container maximaal 50 individuele instanties van de bonenklasse hebben. Elke toestandsverandering aan een instantie zal niet zichtbaar zijn voor andere instanties. Deze instanties worden vernietigd zodra het verzoek is voltooid.

Java config-voorbeeld van request bean scope –

@Component@Scope("request")public class BeanClass {}//or@Component@RequestScopepublic class BeanClass {}

XML config-voorbeeld van request bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="request" />

Lees meer: Hoe webservers werken?

1.4. session scope

In session scope maakt de container voor elke HTTP-sessie een nieuwe instantie aan. Dus, als de server 20 actieve sessies heeft, dan kan de container maximaal 20 individuele instanties van de bonenklasse hebben. Alle HTTP-verzoeken binnen een sessie hebben toegang tot dezelfde booninstantie in dat sessiebereik.

Als een instantie van status verandert, is dat niet zichtbaar voor andere instanties. Deze instanties worden vernietigd zodra de sessie wordt vernietigd/beëindigd op de server.

Java config voorbeeld van session bean scope –

@Component@Scope("session")public class BeanClass {}//or@Component@SessionScopepublic class BeanClass {}

XML config voorbeeld van session bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="session" />

1.5. application scope

In application scope maakt de container één instantie per webapplicatie runtime. Het is bijna gelijk aan singleton scope, met slechts twee verschillen, nl.

  1. application scoped bean is singleton per ServletContext, terwijl singleton scoped bean singleton is per ApplicationContext. Merk op dat er meerdere toepassingscontexten voor één toepassing kunnen zijn.
  2. application scoped bean is zichtbaar als een ServletContext attribuut.

Java config voorbeeld van application bean scope –

@Component@Scope("application")public class BeanClass {}//or@Component@ApplicationScopepublic class BeanClass {}

XML config voorbeeld van application bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="application" />

1.6. websocket scope

Het WebSocket Protocol maakt bidirectionele communicatie mogelijk tussen een client en een host op afstand die zich heeft aangemeld voor communicatie met de client. WebSocket Protocol voorziet in een enkele TCP verbinding voor verkeer in beide richtingen. Dit is vooral nuttig voor multi-user applicaties met gelijktijdige bewerking en multi-user games.

In dit type webapplicaties wordt HTTP alleen gebruikt voor de initiële handshake. De server kan antwoorden met HTTP status 101 (wisselen van protocol) als hij akkoord gaat – met het handshake verzoek. Als de handshake slaagt, blijft de TCP socket open en kunnen zowel client als server deze gebruiken om berichten naar elkaar te sturen.

Java config voorbeeld van websocket bean scope –

@Component@Scope("websocket")public class BeanClass {}

XML config voorbeeld van websocket bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="websocket" />

Merk op dat websocket scoped beans typisch singletons zijn en langer leven dan een individuele WebSocket sessie.

Custom thread scope

Spring biedt ook een niet-standaard thread scope met klasse SimpleThreadScope. Om deze scope te gebruiken, moet je hem registreren bij de container door gebruik te maken van de CustomScopeConfigurer class.

Elk verzoek om een boon zal dezelfde instantie binnen dezelfde thread opleveren.

Java config voorbeeld van thread bean scope –

@Component@Scope("thread")public class BeanClass {}

XML config voorbeeld van thread bean scope –

<bean class="com.howtodoinjava.BeanClass" scope="thread" />

Samenvatting

Spring framework heeft zes spring bean scopes en instanties hebben binnen elk bereik een andere lifecycle span. Als ontwikkelaar moeten we de scope van een container managed bean verstandig kiezen. Ook moeten we verstandige beslissingen nemen wanneer bonen met verschillende scopes naar elkaar verwijzen.

Probeer alle bovenstaande informatie te onthouden om alle Spring Bean scope vragen te kunnen beantwoorden.

Happy Learning!

Was deze post nuttig?

Laat ons weten of je de post leuk vond. Dat is de enige manier waarop we ons kunnen verbeteren.
Ja
Nee

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *