
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
@SessionScopeist eine spezielle, vereinfachte Annotation für den HTTP-Session-Scope, die vor allem in Web-Anwendungen eingesetzt wird.@Scopeist allgemeiner und flexibler, erfordert aber zusätzliche Konfiguration, insbesondere bei Web-Scopes wiesession.
0 Kommentare