DI cung cấp dependencies cho object từ bên ngoài thay vì object tự tạo — giảm coupling, tăng testability.
Spring cài đặt qua:
- Constructor Injection:
public UserService(UserRepository repo) {}— được khuyến nghị nhất, immutable, dependencies rõ ràng. - Setter Injection:
setRepository(UserRepository)— cho optional dependencies. - Field Injection:
@Autowired UserRepository— đơn giản nhưng khó test
IoC container quản lý instantiation và wiring.
Constructor Injection là best practice vì enforce required dependencies.