
1. Application Scope:
- Lebensdauer: Gültig während der gesamten Laufzeit der Webanwendung.
- Kontext: Die Bean wird einmal pro Servlet-Kontext erstellt, was bedeutet, dass es eine einzige Instanz der Bean für die gesamte Anwendung gibt.
- Nutzung: Für globale Konfigurationsdaten oder shared Ressourcen, die von der gesamten Anwendung benötigt werden.
- Web-Kontext spezifisch: Gilt nur für Webanwendungen und ist breiter gefasst als Singleton.
2. Singleton Scope:
- Lebensdauer: Eine einzige Instanz wird für den gesamten Spring-Kontext erstellt und während der gesamten Laufzeit wiederverwendet.
- Kontext: Standard-Bean-Scope in Spring. Es gilt auch für nicht-webbasierte Anwendungen.
- Nutzung: Für Beans, die einmal initialisiert werden und mehrfach verwendet werden, wie z. B. Service- und DAO-Schichten.
- Unterschied zu Application: Gilt sowohl für Web- als auch Nicht-Webanwendungen.
3. Prototype Scope:
- Lebensdauer: Eine neue Bean-Instanz wird bei jeder Anfrage erstellt.
- Kontext: Jede Abfrage (
getBean
) an den Spring-Kontext erstellt eine neue Instanz der Bean. - Nutzung: Für Beans, die kurzlebig sind und keine Wiederverwendung erfordern, wie z. B. Beans, die Benutzerdaten oder Transaktionen enthalten.
- Unterschied zu Singleton: Hier gibt es keine Wiederverwendung der Bean; jede Anforderung erzeugt eine neue Instanz.
Zusammenfassung der Unterschiede:
Scope | Lebensdauer | Anwendungsbereich | Hauptunterschied |
---|---|---|---|
Application | Während der gesamten Web-App | Web-Anwendungen | Gilt für den gesamten Servlet-Kontext. |
Singleton | Während der gesamten App-Laufzeit | Web- und Nicht-Web-Anwendungen | Standard-Scope, gilt unabhängig von Web. |
Prototype | Neue Instanz bei jeder Anfrage | Web- und Nicht-Web-Anwendungen | Kurzlebig, jede Anfrage erzeugt neue Instanz. |
Wann sollte man welchen Scope verwenden?
- Application Scope: Für zentrale Konfigurationen oder globale Ressourcen in Webanwendungen.
- Singleton Scope: Für Services, die häufig verwendet werden und deren Zustand über die gesamte Anwendung gleich bleibt.
- Prototype Scope: Für State-bezogene Beans oder solche, die nur kurzlebig verwendet werden.
Session Scope
Unterschiede zwischen @Scope und @SessionScope im Detail.
Aspekt | @SessionScope | @Scope |
---|---|---|
Fokus | Speziell für den HTTP-Session-Scope | Allgemeine Annotation für verschiedene Scopes |
Verwendbarkeit | Nur in Web-Anwendungen nutzbar | In allen Spring-Kontexten einsetzbar |
Deklaration | Automatisch mit Proxy-Modus ScopedProxyMode.TARGET_CLASS | Muss explizit konfiguriert werden |
Flexibilität | Eingeschränkt auf den Session-Scope | Unterstützt viele Scopes (Singleton, Request, Prototype etc.) |
Boilerplate | Weniger Code nötig | Zusätzliche Konfiguration nötig |
Wann solltest du was verwenden?
- Verwende
@SessionScope
:- Wenn du in einer Web-Anwendung arbeitest und eine Bean explizit im HTTP-Session-Scope benötigst.
- Wenn du eine deklarative, einfache Lösung ohne zusätzliche Konfiguration bevorzugst.
- Verwende
@Scope
:- Wenn du komplexere Anforderungen hast, z. B. andere Scopes (
prototype
,singleton
,request
). - Wenn du über eine Web-Anwendung hinausgehende Kontexte abdeckst.
- Wenn du komplexere Anforderungen hast, z. B. andere Scopes (
Fazit
@SessionScope
ist eine spezielle, vereinfachte Annotation für den HTTP-Session-Scope, die vor allem in Web-Anwendungen eingesetzt wird.@Scope
ist allgemeiner und flexibler, erfordert aber zusätzliche Konfiguration, insbesondere bei Web-Scopes wiesession
.
0 Kommentare