Spring – Bean Scopes

Aanbevelingen

Bij het definiëren van een <bean> heb je de mogelijkheid om een scope te declareren voor die bean. Bijvoorbeeld, om Spring te dwingen een nieuwe boon instantie te produceren elke keer als er een nodig is, moet je het attribuut scope van de boon declareren als prototype. Op dezelfde manier, als je wilt dat Spring dezelfde instantie teruggeeft elke keer dat er een nodig is, moet je het scope attribuut van de bean op singleton zetten.

Het Spring Framework ondersteunt de volgende vijf scopes, waarvan er drie alleen beschikbaar zijn als je een web-aware ApplicationContext gebruikt.

Sr.No. Scope & Description
1

singleton

Dit scoopt de baandefinitie naar een enkele instantie per Spring IoC container (standaard).

2

prototype

Dit scoopt een enkele bean-definitie naar een willekeurig aantal object instanties.

3

request

Dit scoopt een bean-definitie naar een HTTP-verzoek. Alleen geldig in de context van een web-aware Spring ApplicationContext.

4

session

Dit scopes een bean-definitie naar een HTTP sessie. Alleen geldig in de context van een web-aware Spring ApplicationContext.

5

global-session

Dit scopes een bean-definitie naar een globale HTTP sessie. Alleen geldig in de context van een web-aware Spring ApplicationContext.

In dit hoofdstuk bespreken we de eerste twee scopes en de overige drie komen aan de orde als we het hebben over web-aware Spring ApplicationContext.

De singleton scope

Als een scope is ingesteld op singleton, maakt de Spring IoC container precies één instantie van het object dat door die baandefinitie wordt gedefinieerd. Deze enkele instantie wordt opgeslagen in een cache van zulke singleton bonen, en alle volgende requests en referenties voor die genoemde boon retourneren het object in de cache.

De standaard scope is altijd singleton. Als je echter maar één instantie van een boon nodig hebt, kun je in het bonenconfiguratiebestand de eigenschap scope op singleton zetten, zoals in de volgende code snippet –

<!-- A bean definition with singleton scope --><bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --></bean>

Example

Laten we een werkende Eclipse IDE hebben en de volgende stappen doorlopen om een Spring applicatie te maken –

Stappen Beschrijving
1 Maak een project aan met de naam SpringExample en maak een package com.tutorialspoint aan onder de map src in het aangemaakte project.
2 Voeg de benodigde Spring bibliotheken toe met de optie Add External JARs zoals uitgelegd in het hoofdstuk Spring Hello World Example.
3 Maak de Java klassen HelloWorld en MainApp aan onder het pakket com.tutorialspoint.
4 Maak het Beans configuratiebestand Beans.xml onder de map src.
5 De laatste stap is het maken van de inhoud van alle Java-bestanden en het Bean-configuratiebestand en het uitvoeren van de toepassing zoals hieronder wordt uitgelegd.

Hier volgt de inhoud van HelloWorld.java bestand –

package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}

Hier volgt de inhoud van het MainApp.java bestand –

package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}

Hieronder staat het configuratiebestand Beans.xml dat nodig is voor singleton scope –

<?xml version = "1.0" encoding = "UTF-8"?><beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton"> </bean></beans>

Als je klaar bent met het maken van de bron- en bonenconfiguratiebestanden, laten we de applicatie dan draaien. Als alles in orde is met je applicatie, zal deze de volgende boodschap afdrukken –

Your Message : I'm object AYour Message : I'm object A

De prototype scope

Als de scope op prototype is gezet, maakt de Spring IoC container een nieuwe bean instantie van het object iedere keer als er een verzoek voor die specifieke bean wordt gedaan. Gebruik als regel de prototype scope voor alle state-full beans en de singleton scope voor stateless beans.

Om een prototype scope te definiëren, kun je de scope property op prototype zetten in het bean configuratie bestand, zoals te zien is in het volgende codefragment –

<!-- A bean definition with prototype scope --><bean id = "..." class = "..." scope = "prototype"> <!-- collaborators and configuration for this bean go here --></bean>

Example

Laten we de werkende Eclipse IDE op zijn plaats zetten en de volgende stappen volgen om een Spring applicatie te maken –

Stappen Beschrijving
1 Maak een project aan met de naam SpringExample en maak een package com.tutorialspoint aan onder de map src in het aangemaakte project.
2 Voeg de benodigde Spring bibliotheken toe met de optie Add External JARs zoals uitgelegd in het hoofdstuk Spring Hello World Example.
3 Maak de Java klassen HelloWorld en MainApp aan onder het pakket com.tutorialspoint.
4 Maak het Beans configuratiebestand Beans.xml onder de map src.
5 De laatste stap is het maken van de inhoud van alle Java-bestanden en het Bean-configuratiebestand en het uitvoeren van de toepassing zoals hieronder wordt uitgelegd.

Hier volgt de inhoud van HelloWorld.java bestand

package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}

Hier volgt de inhoud van het MainApp.java bestand –

package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}

Hieronder staat het configuratiebestand Beans.xml dat nodig is voor prototype scope –

<?xml version = "1.0" encoding = "UTF-8"?><beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype"> </bean></beans>

Geef een reactie

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