🚀 Day 28 – Bean Scopes: Managing Object Lifecycles the Right Way In Spring-based systems, Bean Scope defines how long an object lives and how many instances are created. It directly impacts memory usage, performance, and thread safety — making it an important architectural decision. 🔹 1. Singleton (Default Scope) ✔ One instance per Spring container ✔ Shared across the application ➡ Best for: Stateless services Utility components ⚠️ Be careful with mutable state (thread-safety concerns) 🔹 2. Prototype Scope ✔ New instance every time requested ➡ Best for: Stateful objects Short-lived processing logic ⚠️ Spring does NOT manage full lifecycle (e.g., destruction) 🔹 3. Request Scope (Web Apps) ✔ One bean per HTTP request ➡ Best for: Request-specific data User context 🔹 4. Session Scope ✔ One bean per user session ➡ Best for: User preferences Session-level caching ⚠️ Can increase memory usage if misused 🔹 5. Application Scope ✔ One bean per ServletContext ➡ Shared across the entire application lifecycle ➡ Rarely used but useful for global configs 🔹 6. Choosing the Right Scope Matters Wrong scope can lead to: ❌ Memory leaks ❌ Concurrency issues ❌ Unexpected behavior ➡ Always align scope with object responsibility & lifecycle 🔹 7. Stateless Design is King Prefer singleton + stateless beans ➡ Easier scaling ➡ Better performance ➡ Fewer concurrency bugs 🔹 8. Scope + Dependency Injection Gotcha Injecting prototype into singleton? ➡ You’ll still get a single instance unless handled properly ➡ Use ObjectFactory / Provider for dynamic resolution 🔥 Architect’s Takeaway Bean scope is not just configuration — it’s an architectural decision. Choosing the right scope ensures: ✔ Efficient memory usage ✔ Better scalability ✔ Thread-safe designs ✔ Predictable behavior 💬 Which bean scope do you use the most — and have you ever faced issues due to wrong scope? #100DaysOfJavaArchitecture #SpringBoot #BeanScopes #Java #Microservices #SystemDesign #TechLeadership
Bean Scopes in Spring: Choosing the Right Object Lifecyle
More Relevant Posts
-
Not every API should return Entity objects. Spring Boot experts use DTOs and Projections for read performance. Most developers do this: @GetMapping("/users") public List<User> getUsers() { return userRepository.findAll(); } It works… but it’s not optimal. ⸻ ❌ Problem Returning Entity: • Loads unnecessary fields • Fetches relationships lazily • Slower response • Tight coupling with DB ⸻ 🧠 Better Option 1 — DTO public class UserDto { private String name; private String email; } Mapping: return users.stream() .map(user -> new UserDto( user.getName(), user.getEmail())) .toList(); ⸻ ⚡ Best Option — Projection (Expert Way) Spring Boot supports interface-based projections: public interface UserProjection { String getName(); String getEmail(); } Repository: List<UserProjection> findAllProjectedBy(); Only required fields are fetched. ⸻ 💡 When to Use Use Entity → write operations Use DTO → API responses Use Projection → read-only optimized queries ⸻ 🧠 Expert Rule Write APIs for write flexibility Read APIs for performance ⸻ Day 18 of becoming production-ready with Spring Boot. Question: Do you use DTO or Projection for read APIs? ⸻ #Java #SpringBoot #BackendEngineering #Performance #SoftwareArchitecture
To view or add a comment, sign in
-
-
What really happens inside a Spring Boot application when an API request hits your system? 🤔 Most of us use Spring Boot daily… but very few truly understand the complete internal flow and architecture behind it. I’ve broken it down in a simple and practical way — covering layers, request flow, and how everything works together in real projects. 📌 Covers: • Architecture layers (Controller → Service → Repository → DB) • End-to-end request flow • Real-world understanding Would love your feedback and thoughts! #Java #SpringBoot #Microservices #BackendDevelopment #SoftwareEngineering
To view or add a comment, sign in
-
Spring Core DAY 12 – Bean Scopes 🚀 Bean Scopes in Spring – What Are They? In Spring Framework, a Bean is an object managed by the Spring IOC Container. But here’s the important question 🤔 👉 How many instances of that bean should Spring create? That’s where Bean Scope comes into the picture. Simply put, Bean Scope defines the lifecycle and visibility of a bean inside the Spring container. 🔹 1️⃣ Singleton Scope (Default) ✔ Only one object is created per Spring container ✔ The same instance is shared everywhere ✔ Default scope in Spring 📌 This means: If 10 different classes use the same bean Spring will still create only ONE object @Component @Scope("singleton") public class MyService { } 💡 Best used for: Service classes DAO/Repository classes Configuration classes Stateless beans ⚡ Advantage: Better memory management Improved performance Centralized control 🔹 2️⃣ Prototype Scope ✔ A new object is created every time the bean is requested ✔ No shared instance @Component @Scope("prototype") public class MyBean { } 📌 This means: Every getBean() call returns a new object Each injection creates a fresh instance 💡 Best used for: Stateful beans Temporary objects User-specific data handling ⚠ Important: Spring does NOT manage full lifecycle of Prototype beans after creation. Destruction callbacks are not called automatically. 🆚 Singleton vs Prototype (Simple Difference) Feature Singleton Prototype Instances One Multiple Default? Yes No Memory Usage Low Higher Lifecycle Fully managed Only initialization 🧠 Why Bean Scope Matters? Choosing the correct scope: ✔ Improves performance ✔ Avoids memory leaks ✔ Prevents unexpected behavior ✔ Ensures thread safety ✔ Frequently asked in interviews 🎯 Real-World Example Imagine a DatabaseService Bean 🔹 Singleton → One shared connection manager 🔹 Prototype → New object for each transaction Wrong scope selection can cause: ❌ Performance issues ❌ Data inconsistency ❌ Concurrency problems 🏆 Pro Interview Tip 👉 What happens when a Prototype bean is injected into a Singleton bean? Only one instance gets injected (because injection happens once during Singleton creation). To get a new instance every time, use: ObjectFactory Provider @Lookup method injection 📌 In Short: Bean Scope = How many objects Spring creates Singleton → One shared object Prototype → New object every request Choosing the right scope = Clean + Efficient + Scalable application ⚡ hashtag#BeanScope hashtag#SpringCore hashtag#Singleton hashtag#Prototype
To view or add a comment, sign in
-
-
🚀 @Component vs @Service vs @Repository — Same or Different? Most developers think all 3 are the same… But there’s a small difference that matters 👇 --- 👉 First, the truth: All three are stereotype annotations in Spring. ✔ @Component ✔ @Service ✔ @Repository Under the hood → ALL are detected during component scanning → All are registered as beans in ApplicationContext --- 💡 Then why 3 different annotations? 👉 It’s about semantic meaning + special behavior --- 1️⃣ @Component → Generic annotation → Used for any Spring-managed class Example: @Component public class EmailUtil {} --- 2️⃣ @Service → Used for business logic layer Example: @Service public class OrderService { // business logic } ✔ Makes code more readable ✔ Helps in layered architecture --- 3️⃣ @Repository → Used for database layer (DAO) Example: @Repository public class UserRepository { // DB operations } 🔥 Special feature: Spring automatically handles database exceptions → Converts them into Spring exceptions (DataAccessException) --- ⚡ Real-world layering: Controller → Service → Repository → DB Each annotation clearly defines responsibility ✅ --- ❌ Common mistake: Using @Component everywhere → Code works, but design becomes messy --- 📌 Key Takeaway: All are technically same… But using the right one makes your code clean, structured, and professional. --- Follow for more such deep dives 🚀 #SpringBoot #Java #BackendDevelopment #SoftwareEngineer
To view or add a comment, sign in
-
-
🚀 Spring Boot – Full Flow & Clean Architecture Today I focused on understanding the complete end-to-end flow of a Spring Boot application and how real-world backend systems are structured. 🧠 Core Flow: Client → Controller → DTO (Validation) → Service → Repository → Database → JSON Response ⚠️ Error Flow: Validation/Exception → Global Handler → Structured Error Response 💡 Key Learnings: ✔️ DTO handles validation and safe data transfer ✔️ Service layer contains business logic (application brain) ✔️ Repository interacts with the database using JPA ✔️ Global exception handling ensures clean and consistent APIs 🏗️ Project Structure (Industry Standard): controller • service • repository • dto • entity • exception • config ✨ This separation of concerns makes applications scalable, maintainable, and team-friendly. 💻 DSA Practice: • Two Sum (HashMap optimization) • Reverse string & valid palindrome 🔍 Understanding how each layer connects has given me much better clarity on building production-ready backend systems. #SpringBoot #Java #BackendDevelopment #RESTAPI #Microservices #CleanArchitecture #DSA #LearningInPublic #SoftwareEngineering
To view or add a comment, sign in
-
🚀 Understanding Layered Architecture in Spring Boot A well-structured application is the foundation of scalable and maintainable systems. One of the most commonly used approaches in backend development is Layered Architecture. 📌 Key Components: 🔹 Presentation Layer Handles client interaction and incoming requests 🔹 Service Layer Defines business logic Uses Service Interfaces & Implementations (e.g., CustomerService & CustomerServiceImpl) Promotes loose coupling and flexibility 🔹 Data Access Layer Uses Repository Interfaces (CustomerRepository, PlanRepository) Implementations are handled by Spring Data Interacts directly with the database 💡 Why use this approach? ✔️ Clear separation of concerns ✔️ Improved code readability ✔️ Easier testing and maintenance ✔️ Better scalability for microservices 📊 Sharing a simple diagram to visualize this architecture 👇 #Java #SpringBoot #Microservices #BackendDevelopment #SoftwareArchitecture #Coding
To view or add a comment, sign in
-
-
In a Spring Boot application, code is structured into layers to keep things clean, maintainable, and scalable. The most common layers are Controller, Service, and Repository each with a clear responsibility. i)Controller * Entry point of the application. * Handles incoming HTTP requests (GET, POST, etc.). * Accepts request data (usually via DTOs). * Returns response to the client. ii)Service * Contains business logic. * Processes and validates data. * Converts DTO ↔ Entity. iii)Repository * Connects with the database. * Performs CRUD operations. * Works directly with Entity objects. Request Flow (Step-by-Step): Let’s understand what happens when a user sends a request: 1. Client sends request Example: `POST /users` with JSON data. 2. Controller receives request * Maps request to a method. * Accepts data in a DTO. ``` @PostMapping("/users") public UserDTO createUser(@RequestBody UserDTO userDTO) { return userService.createUser(userDTO); } ``` 3. Controller → Service * Passes DTO to Service layer. 4. Service processes data * Applies business logic. * Converts DTO → Entity. ``` User user = new User(); user.setName(userDTO.getName()); ``` 5. Service → Repository * Calls repository to save data. ``` userRepository.save(user); ``` 6. Repository → Database * Data is stored in DB. 7. Response Flow Back * Repository → Service → Controller. * Entity converted back to DTO. * Response sent to client. Why DTO is Used: * Prevents exposing internal entity structure. * Controls input/output data. * Improves security. * Keeps layers independent. Why This Architecture Matters: * Clear separation of concerns * Easier debugging & testing * Scalable and maintainable codebase #Java #Spring #SpringBoot #BackendDevelopment #SoftwareEngineering #JavaDeveloper
To view or add a comment, sign in
-
-
Proxy Pattern in Spring Boot — The Hidden Engine Behind Your Annotations! We all use annotations like "@Transactional", "@PreAuthorize", "@Aspect"… But have you ever asked: How does Spring actually make them work? --- What is Proxy-Based Pattern? In , a Proxy is an object that wraps your actual bean and intercepts method calls. 👉 Instead of: Client ->Target It becomes: Client -> Proxy- > Target --- Why is this Powerful? Because Spring can add behavior without modifying your code: ✔ Start & commit transactions ✔ Perform security checks ✔ Add logging / auditing ✔ Control execution flow --- Real Example When you use "@Transactional", Spring: 1. Creates a proxy of your class 2. Intercepts method call 3. Starts transaction 4. Calls actual method 5. Commits/Rolls back Your business logic stays clean! --- Interview Trap (VERY IMPORTANT) Self-invocation breaks proxy: public void methodA() { methodB(); // Proxy NOT used } @Transactional public void methodB() { } No transaction will be applied! Why? Because the call does NOT go through the proxy. --- Types of Proxies ✔ JDK Dynamic Proxy → Works with interfaces ✔ CGLIB Proxy → Works with classes --- Why It Matters? Without proxy pattern: 1. No transaction management 2. No AOP 3. No security interception You’d have to write all of this manually (which cause tight coupling ) --- At last we can say that “Spring uses proxy-based pattern to implement cross-cutting concerns like transactions, security, and logging by intercepting method calls without modifying the actual business logic.” --- #Java #SpringBoot #BackendDevelopment #Microservices #InterviewPrep #TechArchitecture #Spring
To view or add a comment, sign in
-
🚀 DAY 41/100 – Controller Design Best Practices & DTO vs Entity In backend development, writing APIs is not enough. How you structure your controllers and manage data flow defines the quality, scalability, and maintainability of your application. Two concepts that every Spring Boot developer must master early: 👉 Controller Design Best Practices 👉 DTO vs Entity separation A well-designed controller should act only as a request handler, not a business logic layer. Key principles: • Keep controllers thin (delegate logic to service layer) • Use proper HTTP methods & status codes • Validate requests using @Valid • Maintain consistent API structure (/api/v1/...) • Handle exceptions using global handlers (@RestControllerAdvice) 📘 DTO vs Entity (Critical Concept) One of the most common mistakes in early backend projects is exposing entities directly. Why this is a problem: • Security risks (sensitive fields exposed) • Tight coupling between API & database • Poor flexibility for future changes Solution: ✔ Use DTOs for request/response ✔ Keep entities internal to persistence layer ✔ Map between DTO ↔ Entity in service layer 📘 What’s Covered in the Document • Controller responsibilities & anti-patterns • DTO vs Entity deep comparison • Mapping strategies (manual + tools) • Layered architecture breakdown • Interview questions with detailed answers 📄 I’ve compiled everything into a clean, revision-friendly document with examples and code snippets. If you're preparing for Java / Spring Boot / Backend roles (0–3 YOE): 📌 Save this — these are core concepts asked in interviews 🔁 Repost — helps others learning backend fundamentals Follow Surya Mahesh Kolisetty and continue the journey with #100DaysOfBackend #Java #SpringBoot #BackendDevelopment #API #CFBR #Connections #SoftwareEngineering #InterviewPrep #Developers #Programming #LearningInPublic #CleanCode #SystemDesign
To view or add a comment, sign in
-
🚀 Excited to share my latest backend project: Vehicle Feature Mapping System I built this project to demonstrate real-world backend development using Spring Boot and modern Java practices. 🔧 Key Highlights: - JWT Authentication (Access & Refresh Tokens) - Dynamic Filtering using JPA Specifications - Case-insensitive & partial search - Pagination & Sorting - DTO mapping using ModelMapper - Caching for performance - Role-based authorization - Actuator for monitoring - Swagger UI for API testing 📌 The system enables managing vehicle-feature mappings across different countries with flexible search and secure access. 💡 This project helped me strengthen my understanding of: - Spring Security & JWT - JPA & dynamic queries - Clean architecture (Controller → Service → Repository) - Real-world API design 🔗 GitHub Repository: https://lnkd.in/dBcmPJbt 📸 I’ve also attached Postman screenshots to showcase working APIs. 🚀 Next Steps: - Dockerizing the application for easy deployment Would love to hear your feedback! #Java #SpringBoot #BackendDeveloper #JWT #Hibernate #API #SoftwareDevelopment #CloverInfotech
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development