Chúng ta đã biết cách khai báo để đưa đối tượng này vào đối tượng khác, hay có thể nói là đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc, bằng cách sử dụng thuộc tính ref, list … Ngoài ra, Spring còn hỗ trợ chúng ta đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc một cách tự động bằng cách sử dụng Bean Autowiring của nó.
Với Bean Autowiring, chúng ta ko cần phải sử dụng các thuộc tính ref hay list, mà chỉ cần viết code tuân thủ theo quy tắc của Spring thì đối tượng phụ thuộc sẽ tự động được đưa vào đối tượng bị phụ thuộc.
Bạn đang đọc: Bean autowiring trong Spring là gì? – Hướng Dẫn Java
Có ba cách để sử dụng Bean Autowiring, đó là :
- byName
- byType
- constructor
Để những bạn hoàn toàn có thể hiểu rõ hơn, mình sẽ làm một ví dụ nhé ! Trong ví dụ này mình sẽ nhu yếu Spring tự động hóa đưa đối tượng người tiêu dùng Table vào đối tượng người tiêu dùng Room của mình. Cụ thể như sau :
Mình sẽ sử dụng Java 17 cho ứng dụng ví dụ này :
1234 |
17 |
17
Spring dependency như sau :
12345 |
org. springframework |
spring-context
6.0.2
Class Room :
123456789101112131415161718192021 |
packagecom.huongdanjava.springbeanautowiring; publicclassRoom{ privateTabletable; publicRoom(){} publicRoom(Tabletable){ this.table=table; } publicTablegetTable(){ returntable; } publicvoidsetTable(Tabletable){
|
Class Table :
12345678910111213141516 |
|
Class Application :
1234567891011121314151617 |
|
Và khai báo đối tượng người tiêu dùng Table và Room trong tập tin thông số kỹ thuật của Spring :
123456789101112 |
|
id
=
“room”
class
=
“com.huongdanjava.springbeanautowiring.Room”
>
OK, giờ mình sẽ đi lần lượt từng cách một và nói cho các bạn biết cụ thể về nó nhé!
Tóm Tắt
byName
Như các bạn đã biết, mỗi bean trong Spring container đều có 1 id của riêng nó. Dựa vào điều này, Spring quy định nếu id của đối tượng phụ thuộc (trong ví dụ của mình là đối tượng Table) giống với tên một biến nào đó trong đối tượng bị phụ thuộc (đối tượng Room) và khi khai báo đối tượng bị phụ thuộc, chúng ta khai báo thêm thuộc tính autowire=”byName” thì Spring sẽ tự động đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc qua phương thức setter của đối tượng bị phụ thuộc.
Trong ví dụ của mình, id của đối tượng Table đã hoàn toàn giống với tên biến table trong đối tượng Room, do đó chúng ta chỉ cần khai báo thêm cho bean room thuộc tính autowire=”byName” thì Spring sẽ tự động đưa đối tượng Table vào đối tượng Room cho chúng ta.
Cấu hình của đối tượng người dùng Room sẽ sửa lại như sau :
12 |
|
Khi chạy, chương trình sẽ cho ra hiệu quả như sau :
Cách này có bất lợi ở chỗ nếu sau này chúng ta thay đổi tên biến của đối tượng bị phụ thuộc, lại phải đi đổi lại tên id của đối tượng phụ thuộc trong khung chứa của Spring và ngược lại. Các bạn hình dung được chứ nhỉ?
byType
Cách này tất cả chúng ta chỉ vận dụng được với những project nhỏ khi mà mỗi đối tượng người tiêu dùng chỉ có một bean duy nhất trong khung chứa của Spring. Khi đó bằng cách đổi khác thuộc tính autowire = ” byType ” khi khai báo một bean, Spring sẽ tự động hóa đưa đối tượng người dùng phụ thuộc vào vào đối tượng người dùng bị nhờ vào cũng qua phương pháp setter của đối tượng người tiêu dùng bị phụ thuộc vào .
12 |
|
Kết quả :
Nếu những bạn cố ý khai báo thêm một bean khác của đối tượng người dùng nhờ vào như sau :
12345678910 |
|
Thì khi chạy sẽ gặp lỗi :
constructor
Giống như thuộc tính autowire=”byType”, cách này chúng ta cũng chỉ áp dụng khi đối tượng của chúng ta chỉ có một bean duy nhất trong khung chứa của Spring. Khi đó, Spring sẽ tự động đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc qua constructor của đối tượng bị phụ thuộc.
Ví dụ, tất cả chúng ta đổi khác thông số kỹ thuật của bean room như sau :
12 |
|
Kết quả :
4.8 / 5 – ( 12 bầu chọn )
Source: https://final-blade.com
Category : Kiến thức Internet