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 |
session |
Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van een HTTP-sessie.
Alleen geldig in web-aware Spring |
application |
Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van ServletContext .
Alleen geldig in web-aware Spring |
websocket |
Een enkele instantie wordt aangemaakt en is beschikbaar gedurende de volledige levenscyclus van WebSocket .
Alleen geldig in web-aware Spring |
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" />
prototype
scope moeten gebruiken voor alle stateful beans en de singleton
scope voor stateless beans.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.
-
application
scoped bean is singleton perServletContext
, terwijlsingleton
scoped bean singleton is perApplicationContext
. Merk op dat er meerdere toepassingscontexten voor één toepassing kunnen zijn. -
application
scoped bean is zichtbaar als eenServletContext
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!