← Back to Questions
Spring Boot

What is lazy initialization in Spring?

Learn What is lazy initialization in Spring? with simple explanations, real-time examples, interview tips and practical use cases.

What is Lazy Initialization in Spring?

Lazy Initialization in Spring is a mechanism where Spring creates a bean only when it is needed instead of creating it during application startup.

In simple terms:

  • Bean creation is delayed
  • Beans are created on demand
  • Application startup becomes faster
  • Memory usage can be optimized

Lazy Initialization is widely used in:

  • Spring Framework
  • Spring Boot
  • Enterprise Applications
  • Microservices Architecture
  • Cloud-Native Systems

Simple Definition

Lazy Initialization means a Spring bean is created only when the bean is first requested.


Real-Time Banking Example

Consider a banking application with:

  • Payment Service
  • Loan Service
  • Report Generation Service
  • Analytics Service

Some services like ReportService may not be used immediately after application startup.

Creating all services during startup may:

  • Increase startup time
  • Consume unnecessary memory

Lazy Initialization solves this problem by creating beans only when needed.


How Lazy Initialization Works Internally

Application Starts
      |
Spring Container Initializes
      |
Lazy Bean NOT Created
      |
Bean Requested
      |
Spring Creates Bean
      |
Bean Used by Application
    

Default Bean Initialization in Spring

By default:

  • Singleton beans use eager initialization
  • Beans are created during application startup

Eager Initialization Example

@Service
public class PaymentService {

}
    

Spring creates PaymentService during startup automatically.


Lazy Initialization Example

@Service
@Lazy
public class ReportService {

}
    

Here:

  • Spring does NOT create the bean during startup
  • Bean is created only when requested

Using @Lazy Annotation

Spring provides the @Lazy annotation for lazy initialization.

Example

@Component
@Lazy
public class AnalyticsService {

}
    

Lazy Initialization Flow

Application Startup
      |
AnalyticsService NOT Created
      |
User Requests Analytics
      |
Bean Created Dynamically
      |
Bean Used
    

Verifying Lazy Initialization

Example

@Component
@Lazy
public class ReportService {

    public ReportService() {

        System.out.println("Bean Created");
    }

}
    

Output appears only when bean is requested.


Lazy Initialization with ApplicationContext

ApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);

System.out.println("Application Started");

ReportService service =
context.getBean(ReportService.class);
    

Output

Application Started
Bean Created
    

Bean gets created only during getBean() call.


Global Lazy Initialization in Spring Boot

Spring Boot allows enabling lazy initialization globally.

application.properties

spring.main.lazy-initialization=true
    

This makes all beans lazy by default.


Advantages of Lazy Initialization

  • Faster application startup
  • Reduced memory usage
  • Improved startup performance
  • Useful for rarely used beans
  • Efficient resource utilization

1. Faster Startup Time

Beans are not created during startup.

This reduces application initialization time.


2. Reduced Memory Usage

Unused beans do not consume memory immediately.


3. Better Performance for Large Applications

Enterprise applications may contain:

  • Thousands of beans
  • Heavy processing services
  • Expensive initialization logic

Lazy loading improves startup efficiency.


4. Useful for Rarely Used Components

Example:

  • Analytics engines
  • Report generation systems
  • Backup services

Disadvantages of Lazy Initialization

  • First request may become slower
  • Runtime initialization delay
  • Configuration errors detected late
  • Potential dependency issues during runtime

1. Slower First Request

The first request triggers bean creation.

This may slightly delay response time.


2. Errors Detected Late

Bean configuration errors may appear only when the bean is requested.


3. Runtime Initialization Overhead

Creating beans during runtime can impact performance temporarily.


Lazy Initialization vs Eager Initialization

Feature Lazy Initialization Eager Initialization
Bean Creation Time On Demand Application Startup
Startup Speed Faster Slower
Memory Usage Lower Initially Higher Initially
Error Detection Runtime Startup Time
First Request Speed Slightly Slower Faster

When to Use Lazy Initialization

  • Heavy resource-consuming beans
  • Rarely used services
  • Analytics systems
  • Large enterprise applications
  • Optional application modules

When Not to Use Lazy Initialization

  • Frequently used services
  • Critical application components
  • Authentication systems
  • Core business services

Lazy Initialization in Spring Boot

Spring Boot supports lazy initialization for:

  • Microservices startup optimization
  • Cloud-native applications
  • Resource-intensive services
  • Optional modules

Lazy Initialization in Microservices

In Microservices Architecture:

  • Some services may be rarely accessed
  • Heavy modules can be initialized lazily
  • Startup performance becomes important

Lazy initialization helps optimize:

  • Memory usage
  • Container startup time
  • Cloud resource utilization

Microservices Banking Example

Application Startup
      |
Payment Service Loaded
      |
Analytics Service Deferred
      |
Analytics Requested
      |
Analytics Bean Created
    

Common Spring Annotations Related to Lazy Initialization

  • @Lazy
  • @Component
  • @Service
  • @Repository
  • @Controller
  • @Bean

Real-World Enterprise Use Cases

  • Analytics systems
  • Large banking applications
  • Cloud-native microservices
  • Report generation modules
  • Machine learning services

Common Interview Questions

What is Lazy Initialization in Spring?

Lazy Initialization is a mechanism where Spring creates a bean only when it is requested instead of during application startup.

Which annotation is used for Lazy Initialization?

The @Lazy annotation is used for lazy initialization.

What is the difference between Lazy and Eager Initialization?

Lazy Initialization creates beans on demand, while Eager Initialization creates beans during application startup.


Professional Interview Answer

Lazy Initialization in Spring is a feature where bean creation is delayed until the bean is actually required. Spring provides the @Lazy annotation to enable lazy loading for specific beans or entire applications. Lazy Initialization improves startup performance and reduces initial memory consumption, especially in large enterprise applications and microservices architectures. However, bean creation delays and runtime error detection should be considered while using it.


Conclusion

Lazy Initialization is an important optimization feature in Spring Framework and Spring Boot that delays bean creation until required.

It helps improve startup performance, optimize memory usage, and efficiently manage large enterprise applications and cloud-native microservices systems.

Lazy Initialization is especially useful for heavy processing modules, analytics engines, reporting systems, and rarely used services in modern distributed architectures.

Understanding Lazy Initialization is essential for Java developers, Spring Boot developers, backend engineers, and software architects preparing for interviews and building enterprise-grade applications.

Why this Spring Boot question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.