← Back to Home

Module 1: Design Pattern: Dependency Injection

Module Overview

Learn about the dependency injection design pattern and how it can be used to create more maintainable and testable code.

Learning Objectives

Code Example: Dependency Injection

// Without Dependency Injection (tight coupling)
public class OrderService {
    private final DatabaseRepository repository = new MySQLRepository(); // Tightly coupled
    
    public void createOrder(Order order) {
        repository.save(order);
    }
}

// With Dependency Injection (loose coupling)
public class OrderService {
    private final Repository repository; // Interface reference
    
    // Constructor injection
    public OrderService(Repository repository) {
        this.repository = repository;
    }
    
    public void createOrder(Order order) {
        repository.save(order);
    }
}

// With Spring Framework
@Service
public class OrderService {
    private final Repository repository;
    
    @Autowired // Spring handles the injection
    public OrderService(Repository repository) {
        this.repository = repository;
    }
    
    public void createOrder(Order order) {
        repository.save(order);
    }
}

Resources