Dependency Injection (DI) trong Spring là một mẫu thiết kế được sử dụng để loại bỏ sự phụ thuộc giữa các mã chương trình, giúp cho việc quản lý và kiểm thử ứng dụng dễ dàng hơn. Dependency Injection làm cho mã chương trình ít bị phụ thuộc vào nhau hơn.
Khi không sử dụng Dependency Injection
Hãy xem xét ví dụ sau, khi mà chúng ta tạo trực tiếp đối tượng address của lớp Address bên trong lớp Student. Rõ ràng là đối tượng address sẽ bị phụ thuộc vào Student. Mỗi khi muốn thay đổi đối tượng này thì phải thay đổi đối tượng student.
public class Student { private Address address; public Student() { address = new Address(); } }
Sử dụng Dependency Injection
Để đảo ngược tình thế trong ví dụ trên, nghĩa là làm cho student và address giảm phụ thuôc vào nhau, chúng ta có thể khởi tạo đối tượng address ở bên ngoài lớp Student và truyền vào thông qua Constructor hoặc phương thức Setter.
Thông qua Constructor
public class Student { private Address address; // constructor được sử dụng để truyền dependency public Student(Address address) { this.address = address; } }
Thông qua phương thức Setter
public class Student { private Address address; // phương thức setter được sử dụng để truyền dependency public void setAddress(Address address) { this.address = address; } // phương thức getter trả về đối tượng address public Address getAddress() { return address; } }