What does AI know about dependency injection?💉⛓️

Dinuka Kasun Medis
2 min readFeb 18, 2024
Generated with Gemini AI

Recently, I wanted an explanation for dependency injection. So, I decided to ask “Gemini” and he gave me the following explanation. I decided to share it with you through this post.

Understanding dependency injection (DI) can be tricky, but Spring Boot makes it easier! Here’s a breakdown with examples:

What is Dependency Injection (DI)?

Imagine you’re building a car. The engine is crucial, but you don’t build it yourself. Instead, you rely on a reliable engine supplier. This idea, applied to coding, is DI. Your class (car) “depends” on the engine, but Spring Boot (supplier) injects it, keeping your code clean and flexible.

Spring Boot & DI: Example

  1. Define your classes:

đź’‰Car class with methods like startEngine().

đź’‰Engine interface and its implementation, PetrolEngine.

2. Annotate for DI:

đź’‰Mark Car constructor with @Autowired and have Engine as argument:

public class Car {
@Autowired
private Engine engine;

public void startEngine() {
engine.start();
}
}

3. Configure Spring Boot:

đź’‰ Create a @SpringBootApplication class.

đź’‰ Use @Bean annotation to tell Spring Boot about PetrolEngine bean:

@SpringBootApplication
public class MyApplication {
@Bean
public Engine engine() {
return new PetrolEngine();
}
}

Run the application:

đź’‰ Spring Boot automatically creates a Car object and injects the PetrolEngine instance based on your configuration.

đź’‰ You can call startEngine() on the Car object, and it will call the injected PetrolEngine's start() method.

Benefits of DI:

đź’‰ Loose coupling: Classes become independent of specific implementations, making them easier to test and reuse.

đź’‰ Flexibility: You can easily switch between different engine implementations (e.g., electric) without changing the Car class.

đź’‰ Maintainability: Code becomes cleaner and easier to understand.

Real-world Example:

Imagine an e-commerce website. The OrderServiceImpl class needs a PaymentGateway to process payments. Instead of creating the PaymentGateway itself, Spring Boot injects the appropriate implementation (e.g., StripePaymentGateway or PayPalPaymentGateway) based on configuration. This allows for:

đź’‰ Adding new payment providers without changing the core logic.

đź’‰ Easily testing different payment gateways in isolation.

đź’‰ Improved maintainability and flexibility.

Remember: This is a simplified example. In real-world applications, DI can be much more complex and involve various annotations and configurations.

Further Learning:

đź’‰ Spring Boot documentation on DI: [[invalid URL removed]]([invalid URL removed])

đź’‰ https://www.baeldung.com/spring-dependency-injection

--

--

Dinuka Kasun Medis

Hej, jag heter Dinuka Kasun. Välkommen till min profil. Arbeta som mjukvaruingenjör. Och nu för tiden lär jag mig svenska. 🤓🇱🇰 🇸🇪