Bei der Definition einer <Ban> haben Sie die Möglichkeit, einen Scope für diese Bean zu deklarieren. Um Spring beispielsweise zu zwingen, jedes Mal eine neue Bean-Instanz zu erzeugen, wenn eine benötigt wird, sollten Sie das Scope-Attribut der Bean als „prototype“ deklarieren. Wenn Sie möchten, dass Spring jedes Mal, wenn eine Bean benötigt wird, dieselbe Bean-Instanz zurückgibt, sollten Sie das Scope-Attribut der Bean als singleton deklarieren.
Das Spring Framework unterstützt die folgenden fünf Scopes, von denen drei nur verfügbar sind, wenn Sie einen webfähigen ApplicationContext verwenden.
Sr.No. | Geltungsbereich & Beschreibung |
---|---|
1 |
singleton Dies legt den Geltungsbereich der Bean-Definition auf eine einzelne Instanz pro Spring IoC-Container fest (Standard). |
2 |
prototype Damit wird eine einzelne Bean-Definition auf eine beliebige Anzahl von Objektinstanzen skaliert. |
3 |
request Damit wird eine Bean-Definition auf eine HTTP-Anfrage skaliert. Nur gültig im Kontext eines webfähigen Spring ApplicationContext. |
4 |
session Dieser Gültigkeitsbereich einer Bean-Definition bezieht sich auf eine HTTP-Session. Nur gültig im Kontext eines webfähigen Spring ApplicationContextes. |
5 |
global-session Dies legt den Geltungsbereich einer Bean-Definition auf eine globale HTTP-Session fest. Dies ist nur im Kontext eines webfähigen Spring ApplicationContextes gültig. |
In diesem Kapitel werden wir die ersten beiden Scopes besprechen und die verbleibenden drei werden besprochen, wenn wir über den webfähigen Spring ApplicationContext sprechen.
Der Singleton-Scope
Wenn ein Scope auf Singleton gesetzt ist, erzeugt der Spring IoC-Container genau eine Instanz des durch diese Bean-Definition definierten Objekts. Diese einzelne Instanz wird in einem Cache für solche Singleton-Beans gespeichert, und alle nachfolgenden Anfragen und Referenzen für diese benannte Bean geben das Objekt aus dem Cache zurück.
Der Standardbereich ist immer singleton. Wenn Sie jedoch nur eine einzige Instanz einer Bean benötigen, können Sie die Eigenschaft scope in der Bean-Konfigurationsdatei auf singleton setzen, wie im folgenden Codeschnipsel gezeigt –
<!-- A bean definition with singleton scope --><bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --></bean>
Beispiel
Lassen Sie uns eine funktionierende Eclipse IDE verwenden und die folgenden Schritte durchführen, um eine Spring Anwendung –
Schritte | Beschreibung |
---|---|
1 | Erstellen Sie ein Projekt mit dem Namen SpringExample und erstellen Sie ein Paket com.tutorialspoint unter dem Ordner src im erstellten Projekt an. | 2 | Fügen Sie die erforderlichen Spring-Bibliotheken mit der Option Externe JARs hinzufügen hinzu, wie im Kapitel Spring Hello World Example erläutert. |
3 | Erstellen Sie die Java-Klassen HelloWorld und MainApp unter dem Paket com.tutorialspoint. |
4 | Erstellen Sie die Beans-Konfigurationsdatei Beans.xml unter dem src-Ordner. |
5 | Der letzte Schritt besteht darin, den Inhalt aller Java-Dateien und der Bean-Konfigurationsdatei zu erstellen und die Anwendung wie unten beschrieben auszuführen. |
Hier ist der Inhalt der Datei HelloWorld.java –
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); }}
Nachfolgend ist der Inhalt der Datei MainApp.java-Datei –
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(); }}
Nachfolgend ist die Konfigurationsdatei Beans.xml, die für den Singleton-Bereich benötigt wird –
<?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>
Wenn Sie mit dem Erstellen der Quell- und Bean-Konfigurationsdateien fertig sind, lassen Sie uns die Anwendung ausführen. Wenn mit Ihrer Anwendung alles in Ordnung ist, wird sie die folgende Meldung ausgeben –
Your Message : I'm object AYour Message : I'm object A
Der Prototyp-Scope
Wenn der Scope auf Prototyp gesetzt ist, erzeugt der Spring IoC-Container jedes Mal eine neue Bean-Instanz des Objekts, wenn eine Anfrage für diese spezifische Bean gestellt wird. Verwenden Sie in der Regel den Prototyp-Scope für alle zustandsfähigen Beans und den Singleton-Scope für zustandslose Beans.
Um einen Prototyp-Scope zu definieren, können Sie die Scope-Eigenschaft in der Bean-Konfigurationsdatei auf Prototyp setzen, wie im folgenden Codeschnipsel gezeigt –
<!-- A bean definition with prototype scope --><bean id = "..." class = "..." scope = "prototype"> <!-- collaborators and configuration for this bean go here --></bean>
Beispiel
Lassen Sie uns die Eclipse IDE in Betrieb nehmen und die folgenden Schritte ausführen, um eine Spring Anwendung –
Schritte | Beschreibung |
---|---|
1 | Erstellen Sie ein Projekt mit dem Namen SpringExample und erstellen Sie ein Paket com.tutorialspoint unter dem Ordner src im erstellten Projekt an. | 2 | Fügen Sie die erforderlichen Spring-Bibliotheken mit der Option Externe JARs hinzufügen hinzu, wie im Kapitel Spring Hello World Example erläutert. |
3 | Erstellen Sie die Java-Klassen HelloWorld und MainApp unter dem Paket com.tutorialspoint. |
4 | Erstellen Sie die Beans-Konfigurationsdatei Beans.xml unter dem src-Ordner. |
5 | Der letzte Schritt besteht darin, den Inhalt aller Java-Dateien und der Bean-Konfigurationsdatei zu erstellen und die Anwendung wie unten beschrieben auszuführen. |
Hier ist der Inhalt der Datei HelloWorld.java
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); }}
Nachfolgend ist der Inhalt der MainApp.java-Datei –
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(); }}
Nachfolgend finden Sie die Konfigurationsdatei Beans.xml, die für den Prototyp-Bereich benötigt wird –
<?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>