๐ฑ Spring Boot Interview Series – Q7 ๐ก: Dependency Injection & Bean Management Deep Dive ๐๐ ️๐
๐ฑ Spring Boot Interview Series – Q6 ๐ก: Dependency Injection & Bean Management Deep Dive ๐๐ ️๐
21️⃣ Difference between @Component, @Service, @Repository, and @Controller
Spring Boot uses stereotype annotations to manage beans and organize layers:
- @Component – Generic annotation for any Spring-managed bean.
- @Service – Marks service layer classes for business logic.
- @Repository – Marks DAO layer classes; enables automatic exception translation.
- @Controller – Handles HTTP requests; used with MVC or REST APIs.
๐ก Real-time Example:
@Repository public class UserRepository { ... } @Service public class UserService { @Autowired private UserRepository userRepository; }
22️⃣ Difference between @Bean and @Component
@Component → automatic bean detection via component scanning.
@Bean → explicit bean creation inside a @Configuration class; perfect for third-party classes or custom initialization.
@Configuration public class AppConfig { @Bean public PaymentService paymentService() { return new CreditCardPaymentService(); } }
⚠️ Common mistake: Using @Component on external library classes will not work. Use @Bean instead.
23️⃣ How does @Configuration differ from @Component
@Configuration is a special type of @Component used to declare beans via @Bean methods. Spring ensures singleton beans using CGLIB proxies.
⚠️ Common mistake:
@Component public class AppConfig { @Bean public PaymentService paymentService() { ... } }
This can break singleton guarantees.
24️⃣ What is a Bean definition in Spring Boot
A bean is any object managed by Spring IoC container.
Bean definition = metadata describing the bean: class, scope, dependencies, init/destroy methods. Spring uses this to instantiate and manage lifecycle.
25️⃣ What is bean scope in Spring Boot? Name all scopes
Scope | Description |
---|---|
singleton | Default, one instance per container |
prototype | New instance each time requested |
request | One instance per HTTP request |
session | One instance per HTTP session |
application | One instance per ServletContext |
websocket | One instance per WebSocket session |
26️⃣ Difference between singleton and prototype bean scope
Singleton beans are shared across the container; prototype beans are new per request.
Singleton → CheckoutService Prototype → ShoppingCart per user
27️⃣ What is @Primary and when is it used
@Primary resolves ambiguity when multiple beans of the same type exist. Spring injects the primary bean by default.
@Component @Primary public class FastPaymentService implements PaymentService {}
28️⃣ How to use @Qualifier to resolve bean conflicts
@Autowired @Qualifier("fastPaymentService") private PaymentService paymentService;
๐ก @Primary = default; @Qualifier = explicit selection.
29️⃣ Field injection vs Setter vs Constructor injection
Type | Pros | Cons / Real-time proof |
---|---|---|
Field | Quick, simple | Hard to unit test; could be null outside Spring |
Setter | Testable, optional | Mutable; accidental reassignment possible |
Constructor | Immutable, testable, fail-fast | More boilerplate; safest for production |
30️⃣ Why constructor injection is recommended
@Component public class CheckoutService { private final PaymentService paymentService; @Autowired public CheckoutService(PaymentService paymentService) { this.paymentService = paymentService; } }
✅ Ensures immutability, fail-fast, unit-testable. ❌ Mistake: making fields public breaks safety.
31️⃣ Can Spring Boot inject values into static fields?
❌ No. Spring injects instance-level fields only.
Workarounds:
- Use @PostConstruct to assign static fields from instance fields.
- Prefer singleton beans instead of static injection.
32️⃣ How to load values from application.properties into a bean
@Component public class AppConfig { @Value("${app.name}") private String appName; }
33️⃣ What is @Value used for
Inject property values from application.properties, application.yml, or environment variables. Supports SpEL:
@Value("#{2 * 2}") // injects 4
34️⃣ How to bind a group of properties to a POJO
@Component @ConfigurationProperties(prefix = "db") public class DbProperties { private String url; private String username; private String password; }
๐ก Supports relaxed binding: db-url → dbUrl
35️⃣ How to create a lazy-loaded bean in Spring Boot
@Component @Lazy public class RecommendationEngine { public RecommendationEngine() { System.out.println("ML model loaded!"); } }
Real-time scenario: E-commerce recommendation engine only loads when a user opens “Recommended for You”. Saves startup time & memory.
๐ Wrapping Up
Dependency Injection & Bean Management is the heartbeat of Spring Boot. Key takeaways:
- Master stereotypes, scopes, injection types.
- Use constructor injection with final fields for safe, testable, production-ready code.
- Use @Lazy for heavy or optional beans to optimize startup and memory.
- Understand @Primary, @Qualifier, @Value, @ConfigurationProperties for real-world apps.
๐ก Interview tip: Use real-time examples like checkout/payment systems, shopping carts, or ML-based recommendations to explain DI concepts. Shows deep understanding beyond syntax!
Comments
Post a Comment