Im Spring-Framework können wir Beans in 6 eingebauten Spring Bean-Scopes erstellen und Sie können auch Ihren eigenen Bean-Scope definieren. Von diesen sechs Scopes sind vier nur verfügbar, wenn Sie ein Web-aware ApplicationContext verwenden. singleton und prototype Scopes sind in jedem Typ von IOC-Containern verfügbar.

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 Typ

In Spring kann der Scope mit der Spring Bean @Scope Annotation definiert werden. Lassen Sie uns schnell alle sechs eingebauten Bean-Scopes auflisten, die im Spring-Anwendungskontext verwendet werden können. Die gleichen Bereiche gelten auch für den Spring-Boot-Bean-Bereich.

Scope Beschreibung
singleton (Standard) Eine einzige Bean-Objekt-Instanz pro Spring-IoC-Container
prototype Gegenstück zu Singleton, erzeugt es jedes Mal eine neue Instanz, wenn eine Bean angefordert wird.
request Eine einzelne Instanz wird erzeugt und ist während des gesamten Lebenszyklus einer HTTP-Anfrage verfügbar.

Nur gültig in web-aware Spring ApplicationContext.

session Eine einzelne Instanz wird erstellt und ist während des gesamten Lebenszyklus einer HTTP-Sitzung verfügbar.

Nur gültig in web-aware Spring ApplicationContext.

application Eine einzelne Instanz wird erstellt und ist während des gesamten Lebenszyklus von ServletContext verfügbar.

Nur gültig in web-aware Spring ApplicationContext.

websocket Eine einzelne Instanz wird erstellt und ist während des gesamten Lebenszyklus von WebSocket verfügbar.

Nur gültig in web-aware Spring ApplicationContext.

1.1. Singleton-Scope

singleton ist der Standard-Bean-Scope im Spring-Container. Er weist den Container an, nur eine Instanz der Bean-Klasse pro Container zu erzeugen und zu verwalten. Diese einzelne Instanz wird in einem Cache solcher Singleton Beans gespeichert, und alle nachfolgenden Anfragen und Referenzen für diese benannte Bean geben die gecachte Instanz zurück.

Beispiel für Singleton Scope Bean mit Java-Konfiguration –

Beispiel für Singleton Scope Bean mit XML-Konfiguration –

1.2. Prototyp-Scope

prototypeScope führt dazu, dass jedes Mal eine neue Bean-Instanz erzeugt wird, wenn eine Anfrage für die Bean durch den Anwendungscode gestellt wird.

Sie sollten wissen, dass Methoden zur Zerstörung von Bean-Lebenszyklen bei Beans mit prototype-Scope nicht aufgerufen werden, sondern nur Initialisierungs-Callback-Methoden. Als Entwickler sind Sie also für das Aufräumen von prototype-scoped Bean-Instanzen und den darin enthaltenen Ressourcen verantwortlich.

Java-Konfigurationsbeispiel für den Prototyp-Bean-Bereich –

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

XML-Konfigurationsbeispiel für den Prototyp-Bean-Bereich –

<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
In der Regel, sollten Sie den prototype-Scope für alle stateful Beans und den singleton-Scope für stateless Beans bevorzugen.
Um Beans im Request-, Session-, Application- und Websocket-Scope zu verwenden, müssen Sie das RequestContextListener oder RequestContextFilter registrieren.

1.3. Anforderungsbereich

Im request-Bereich erzeugt der Container für jede einzelne HTTP-Anfrage eine neue Instanz. Wenn der Server also gerade 50 Anfragen bearbeitet, dann kann der Container maximal 50 einzelne Instanzen der Bean-Klasse haben. Jede Zustandsänderung an einer Instanz ist für die anderen Instanzen nicht sichtbar. Diese Instanzen werden zerstört, sobald die Anfrage abgeschlossen ist.

Beispiel für die Java-Konfiguration eines Bean-Bereichs –

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

Beispiel für die XML-Konfiguration eines Bean-Bereichs –

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

Weiter lesen: Wie funktionieren Webserver?

1.4. Session-Scope

Im session-Scope erzeugt der Container für jede einzelne HTTP-Session eine neue Instanz. Wenn der Server also 20 aktive Sitzungen hat, dann kann der Container maximal 20 einzelne Instanzen der Bean-Klasse haben. Alle HTTP-Anfragen innerhalb der Lebensdauer einer einzelnen Sitzung haben Zugriff auf dieselbe einzelne Bean-Instanz in diesem Sitzungsbereich.

Jede Zustandsänderung an einer Instanz ist für die anderen Instanzen nicht sichtbar. Diese Instanzen werden zerstört, sobald die Session auf dem Server zerstört/beendet wird.

Java-Konfigurationsbeispiel für Session-Bean-Bereich –

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

XML-Konfigurationsbeispiel für Session-Bean-Bereich –

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

1.Anwendungsbereich

Im application-Bereich erzeugt der Container eine Instanz pro Web-Anwendungslaufzeit. Er ist dem singleton-Scope fast ähnlich, mit nur zwei Unterschieden, nämlich

  1. application scoped bean ist singleton pro ServletContext, während singleton scoped bean ist singleton pro ApplicationContext. Bitte beachten Sie, dass es mehrere Anwendungskontexte für eine einzelne Anwendung geben kann.
  2. application scoped bean ist als ServletContext Attribut sichtbar.

Java Config Beispiel für Application Bean Scope –

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

XML Config Beispiel für Application Bean Scope –

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

1.6. Websocket-Bereich

Das WebSocket-Protokoll ermöglicht die Zwei-Wege-Kommunikation zwischen einem Client und einem entfernten Host, der sich für die Kommunikation mit dem Client entschieden hat. Das WebSocket-Protokoll bietet eine einzige TCP-Verbindung für den Verkehr in beide Richtungen. Dies ist besonders nützlich für Multi-User-Anwendungen mit gleichzeitiger Bearbeitung und Multi-User-Spiele.

Bei dieser Art von Web-Anwendungen wird HTTP nur für den ersten Handshake verwendet. Der Server kann mit dem HTTP-Status 101 (Umschalten des Protokolls) antworten, wenn er der Handshake-Anfrage zustimmt. Wenn der Handshake erfolgreich ist, bleibt der TCP-Socket offen und sowohl Client als auch Server können ihn nutzen, um sich gegenseitig Nachrichten zu senden.

Java Config Beispiel für Websocket Bean Scope –

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

XML Config Beispiel für Websocket Bean Scope –

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

Bitte beachten Sie, dass websocket scoped beans typischerweise Singletons sind und länger leben als jede einzelne WebSocket-Sitzung.

Benutzerdefinierter Thread-Bereich

Spring bietet auch einen nicht standardmäßigen thread-Bereich mit der Klasse SimpleThreadScope. Um diesen Bereich zu verwenden, müssen Sie ihn mit der Klasse CustomScopeConfigurer im Container registrieren.

Jede Anfrage nach einer Bean gibt dieselbe Instanz innerhalb desselben Threads zurück.

Beispiel für die Java-Konfiguration eines Thread-Bean-Bereichs –

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

Beispiel für die XML-Konfiguration eines Thread-Bean-Bereichs –

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

Zusammenfassung

Das Spring-Framework stellt sechs Spring-Bean-Bereiche zur Verfügung, und die Instanzen haben in jedem Bereich eine andere Lebensspanne. Als Entwickler müssen wir den Scope einer beliebigen container-verwalteten Bean mit Bedacht wählen. Außerdem müssen wir kluge Entscheidungen treffen, wenn Beans mit unterschiedlichen Scopes aufeinander verweisen.

Versuchen Sie, sich an die oben genannten Informationen zu erinnern, um die Fragen zum Anwendungsbereich von Spring Beans im Interview zu beantworten.

Viel Spaß beim Lernen!!!

War dieser Beitrag hilfreich?

Lassen Sie uns wissen, ob Ihnen der Beitrag gefallen hat. Nur so können wir uns verbessern.
Ja
Nein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.