How Does Session Scope Actually Work in Spring?
The Spring Framework provides several bean scopes that determine the lifecycle and visibility of beans in the application context: Singleton Prototype Request Session Application WebSocket The last four scopes (request, session, application, and WebSocket) are specifically designed for web applications. A session-scoped bean in Spring is a bean that is created once per HTTP session and shared across multiple requests from the same user. It remains active until the session expires or is invalidated. Session-scoped beans are useful for storing temporary, user-specific data. 1. User ID : If a user ID is used across multiple HTTP requests, it's better to store it in the session scoped bean rather than querying the database on every request. 2. theme : If the application supports multiple UI themes, the user’s theme preference can be stored in a session-scoped bean to maintain consistency across all requests. 3. User Roles : Once authenticated, the user's roles can be stored in a session-scoped bean for quick access during subsequent requests. 4. language : User's language preferences (locale) can be stored in a session-scoped bean to maintain a consistent user experience across all requests. Lifecycle Created when a new HTTP session starts (e.g., user logs in). Destroyed when the session expires (timeout, logout, or invalidation). Each user gets their own instance. Use Cases Storing user-specific data (e.g., shopping cart, authentication details). Maintaining state across multiple requests (e.g., user preferences). Avoiding repeated database fetches for session-related data. I noticed many beginners struggle with @SessionScope in Spring. After researching, I made: A short video with real use case : https://youtu.be/04nnFG2XKjQ A GitHub repo with runnable code: https://github.com/javalearnerss/bean-scopes/tree/main/session-scope For spring and Java tutorials, you can join my youtube channel - https://youtube.com/@javalearnerss

The Spring Framework provides several bean scopes that determine the lifecycle and visibility of beans in the application context:
- Singleton
- Prototype
- Request
- Session
- Application
- WebSocket
The last four scopes (request, session, application, and WebSocket) are specifically designed for web applications.
A session-scoped bean in Spring is a bean that is created once per HTTP session and shared across multiple requests from the same user. It remains active until the session expires or is invalidated.
Session-scoped beans are useful for storing temporary, user-specific data.
1. User ID : If a user ID is used across multiple HTTP requests, it's better to store it in the session scoped bean rather than querying the database on every request.
2. theme : If the application supports multiple UI themes, the user’s theme preference can be stored in a session-scoped bean to maintain consistency across all requests.
3. User Roles : Once authenticated, the user's roles can be stored in a session-scoped bean for quick access during subsequent requests.
4. language : User's language preferences (locale) can be stored in a session-scoped bean to maintain a consistent user experience across all requests.
Lifecycle
- Created when a new HTTP session starts (e.g., user logs in).
- Destroyed when the session expires (timeout, logout, or invalidation).
- Each user gets their own instance.
Use Cases
- Storing user-specific data (e.g., shopping cart, authentication details).
- Maintaining state across multiple requests (e.g., user preferences).
- Avoiding repeated database fetches for session-related data.
I noticed many beginners struggle with @SessionScope
in Spring. After researching, I made:
- A short video with real use case : https://youtu.be/04nnFG2XKjQ
- A GitHub repo with runnable code: https://github.com/javalearnerss/bean-scopes/tree/main/session-scope
For spring and Java tutorials, you can join my youtube channel - https://youtube.com/@javalearnerss