Scopes in Spring: Singleton, Prototype, Request, Session & Application
Java Fleet Systems Consulting
Scopes in Spring bestimmen, wie lange eine Bean-Instanz lebt und wie viele Instanzen Spring erstellt. Das ist super wichtig für Performance, Memory-Management und Thread-Safety!
Standard in Spring!
Eine Instanz für die gesamte Anwendung. Wird beim Start erstellt und von allen geteilt.
Immer neu!
Neue Instanz bei jedem getBean()-Aufruf. Jede Instanz ist unabhängig.
Pro HTTP-Request
Eine Instanz pro Request. Wird danach verworfen. Perfekt für request-spezifische Daten!
Pro User-Session
Eine Instanz pro Session. Bleibt erhalten während der Session. Perfekt für User-Daten!
Globaler ServletContext
Eine Instanz für die gesamte Web-App, geteilt über alle Sessions. Ähnlich wie Singleton.
Alle auf einen Blick
Vergleiche alle Scopes gleichzeitig und sieh den Unterschied in Aktion!
| Scope | Instanzen | Lebensdauer | Use Case |
|---|---|---|---|
| Singleton | 1 pro Container | Container Lifetime | Services, Repositories, Stateless Beans |
| Prototype | Neu bei jedem getBean() | Bis GC | Stateful Objekte, Commands |
| Request | 1 pro HTTP Request | Request Lifetime | Request-spezifische Daten |
| Session | 1 pro HTTP Session | Session Lifetime | User-Daten, Shopping Cart |
| Application | 1 pro ServletContext | Application Lifetime | Global Counters, Caches |
Die meisten Beans sollten Singleton sein! Das ist performant und macht Sinn für stateless Services. Nutze andere Scopes nur, wenn du sie wirklich brauchst.
Wichtig: Web-Scopes (Request, Session, Application) benötigen
proxyMode = TARGET_CLASS wenn sie in Singleton-Beans injected werden!