Autowiring trong spring, annotation @autowired trong spring

  -  
1. Spring Autowiring là gì?

Trong bài Spring Dependency Injection cùng với Object chúng ta đã khám phá khi mối quan hệ giữa các class là has-a (1 đối tượng chứa 1 đối tượng người dùng khác) họ sẽ tạo nên bean mang đến đối tượng bên phía trong và truyền nó vào hàm khởi tạo hoặc setter

Autowired trong Spring, những kiểu autowiring" width="738" height="254" srcset="https://shirohada.com.vn/wp-content/uploads/2017/12/spring-auto-wiring-no.png 738w, https://shirohada.com.vn/wp-content/uploads/2017/12/spring-auto-wiring-no-300x103.png 300w" sizes="(max-width: 738px) 100vw, 738px" />

Trong lấy ví dụ trên họ tạo bean ‘address’ cho class Address.java, vào bean ‘person’ họ dùng ở trong tính ref để links tới bean address.

Bạn đang xem: Autowiring trong spring, annotation @autowired trong spring

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

2. Những loại Auto-wiring trong Spring

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

Xem thêm: Danh Sách Các Lá Bài Ma Sói, Cách Chơi Ma Sói Như Thế Nào Dễ Thắng Nhất

2.1 Auto-wiring ‘no’

Đây là bí quyết mà bọn họ áp dụng vào ví dụ sinh sống trên. Nó cũng là cơ chế auto-wiring khoác định, bạn phải wire (nối) bean thông qua thuộc tính ‘ref’

2.2 Auto-wiring ‘byName’

Trong trường đúng theo này, Spring container vẫn tìm bean bao gồm id trùng cùng với attribute Address vào class Person cùng thực thiện tự động wired trải qua method setter. public void setAddress(Address address)

*

*

2.3 Auto-wiring ‘byType’

Trong trường vừa lòng này, Spring container vẫn tìm bean có type là Address và thực thiện tự động hóa wired trải qua method setter. public void setAddress(Address address)

*

*

2.4. Auto-Wiring ‘constructor’

Trong trường hợp này, Spring container đã tìm bean tất cả type như thể với type của address trong method constructor cùng thực hiện tự động hóa wired trải qua method constructor – public Person(Address address)

*

*

2.5. Auto-Wiring ‘autodetect’

Với cách này, Spring Container sẽ thử với tự động wired byConstructor, nếu như không được thì nó đưa sang tự động wired byType. Tuy vậy cách này đã không còn sử dụng từ bỏ Spring version 3 nên họ không cần suy xét nó nữa =))

*

3. Annotation
Autowired trong Spring

annotation
Autowired biểu thị rằng các thuộc tính sẽ được tự động hóa wired:

Ví dụ: để tự động hóa 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;Để tự động wired byConstructor ta khai báo
Autowired ngơi nghỉ trước method Constructor:


Autowired(required=true)public Person(Address address) this.address = address;*Lưu ý: thuộc tính required của annotation
Autowired mặc định là true.

required = true, nếu spring container không tìm thấy bean address để inject vào thì nó đang báo lỗirequired = false, ví như Spring container không tìm kiếm thấy bean address nhằm inject vào thì nó vẫn inject null


Autowired là 1 trong annotation config của Spring, để sử dụng nó ta yêu cầu khai báo thẻ

 trong file config.

Xem thêm: Hẹn Hò Trong Phòng Tắm Game 18+, Hẹn Hò Trong Phòng Tắm

(Khai báo namespace: context để áp dụng thẻ )

*

*

Demo:

package shirohada.com.vn.springdiobject.demo;import org.springframework.beans.factory.annotation.Autowired;public class Person private String name; private int age;
Autowired(required = false) private Address address; public Person() public Person(Address address) this.address = address; public Person(String name, int age, Address address) this.name = name; this.age = age; this.address = address; public String getName() return name; public void setName(String name) this.name = name; public Address getAddress() return address; public void setAddress(Address address) this.address = address; public int getAge() return age; public void setAge(int age) this.age = age; public void print() System.out.println("Person: " + this.name + " Age: " + this.age + " Address: " + (this.address == null ? "null" : this.address.toString())); package shirohada.com.vn.springdiobject.demo;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp public static void main(String<> args) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Person person = (Person) context.getBean("person"); person.print(); Kết quả:

Person: shirohada.com.vn Age: 25 Address: Address 4. Một số để ý với tự động wiring trong SpringKhả năng ghi đè (Overriding possibility): các bạn vẫn có thể chỉ rõ dependency bằng phương pháp sử dụng  cùng nó sẽ ghi đè lại autowiringKiểu tài liệu nguyên thủy (Primitive data types): các bạn không thể tiến hành autowire với các dữ liệu nguyên thủy như int, String…Confusing nature: vấn đề autowiring triển khai tự động, đôi lúc nó hoàn toàn có thể link tới hầu hết bean ko tồn tại, nếu có thể thì chúng ta hãy liên kết nó một cách ví dụ và sử dụng required = true để chắc chắn là bean được prefer tới tất cả tồn tại.