Spring Core – Phần 8: Autowiring trong Spring, annotation @Autowired trong Spring, các kiểu autowiring

16 tháng 12, 2021 – 2133 lượt xem

Để hiểu rõ hơn về Spring:

Và cùng đến với Series Spring Core:

1. Spring Autowiring là gì?

Trong bài Spring Dependency Injection với Object chúng ta đã tìm hiểu khi mối quan hệ giữa các class là has-a (1 đối tượng chứa 1 đối tượng khác) chúng ta sẽ tạo bean cho đối tượng bên trong và truyền nó vào hàm khởi tạo hoặc setterSpring Core - Phần 8: Autowiring trong Spring, annotation @Autowired trong Spring, các kiểu autowiring

Trong ví dụ trên chúng ta tạo bean ‘address’ cho class Address.java, trong bean ‘person’ chúng ta dùng thuộc tính ref để link tới bean address.

Thực tế thì chúng ta không cần chỉ rõ biến address trong person link tới bean nào, Spring Container sẽ tự động tìm bean thích hợp để inject nó vào. Đó chính là auto-wiring trong Spring.

2. Các loại Auto-wiring trong Spring

Có 5 loại auto-wiring trong Spring .

2.1 Auto-wiring ‘no’

Đây là cách mà tất cả chúng ta vận dụng trong ví dụ ở trên. Nó cũng là chính sách auto-wiring mặc định, bạn cần wire ( nối ) bean trải qua thuộc tính ‘ ref ’

2.2 Auto-wiring ‘byName’

Trong trường hợp này, Spring container sẽ tìm bean có id trùng với attribute Address trong class Person và thực thiện auto wired thông qua method setter. public void setAddress(Address address)

2.3 Auto-wiring ‘byType’

Trong trường hợp này, Spring container sẽ tìm bean có type là Address và thực thiện auto wired thông qua method setter. public void setAddress(Address address)

2.4. Auto-Wiring ‘constructor’

Trong trường hợp này, Spring container sẽ tìm bean có type giống với type của address trong method constructor và thực hiện auto wired thông qua method constructor – public Person(Address address)

2.5. Auto-Wiring ‘autodetect’

Với cách này, Spring Container sẽ thử với auto wired byConstructor, nếu không được thì nó chuyển sang auto wired byType. Tuy nhiên cách này đã không còn sử dụng từ Spring version 3 nên chúng ta không cần quan tâm đến nó nữa =))

3. annotation @Autowired trong Spring

annotation @ Autowired biểu lộ rằng những thuộc tính sẽ được auto wired :Ví dụ : để auto wired byType ta khai báo @ Autowired ở trước phần khai báo thuộc tính hoặc trước method setter :

@Autowired(required = false)
private Address address;
//hoặc
@Autowired(required = false)
public void setAddress(Address address) {
  this.address = address;
}

Để auto wired byConstructor ta khai báo @Autowired ở trước method Constructor:

Loạt bài chủ đề Java trên trang stackjava.com bản quyền thuộc thầy Trần Hữu Cương. Bài viết đăng trên blog Techmaster được sự chấp thuận đồng ý của tác giả .Thầy Trần Hữu Cương đã và đang tham gia giảng dạy tại Techmater khóa Lộ trình Java Spring Boot Full StackLink gốc bài viết tại đây .