Sử dụng annotation @Qualifier trong Spring

Trong bài viết về Bean autowiring trong Spring, các bạn đã biết trong trường hợp autowire byType, chúng ta không thể khai báo nhiều hơn 1 bean của cùng một đối tượng phụ thuộc trong Spring container. Bởi vì lúc này Spring không biết phải sử dụng bean nào để mà autowire.

Vậy có giải pháp nào khi chúng ta cần khai báo nhiều bean cho cùng một đối thuộc mà vẫn autowire được hay không? Thật may là chúng ta vẫn có một cách, đó là các bạn hãy chuyển qua autowire bean sử dụng annotation @Autowired và sử dụng annotation @Qualifier mà Spring hỗ trợ cho chúng ta. Hãy xem chúng ta cần làm gì nhé các bạn!

Để dễ hình dung, mình sẽ tạo một ví dụ như sau:

Sử dụng annotation @Qualifier trong Spring

Với Spring dependency như sau:

Mình sẽ sử dụng Java 17 cho ví dụ này:

Class Room:

Class Table

Class Application

Và khai báo đối tượng Table và Room trong tập tin cấu hình của Spring:

OK, giờ chúng ta có thể bắt đầu rồi!

Như các bạn đã biết, nếu bây giờ mình khai báo nhiều hơn 1 bean cho cùng một đối tượng Table trong ví dụ của chúng ta như sau:

thì khi chạy chúng ta sẽ gặp lỗi:

Để giải quyết lỗi này, chúng ta sẽ sử dụng annotation @Qualifier để chỉ định rõ bean nào của đối tượng Table sẽ được autowire vào bean của đối tượng Room bằng cách chỉnh sửa class Room như sau:

Giá trị trong annotation @Qualifier là bean id của bean mà chúng ta cần autowire. Ở đây, mình sử dụng bean id “table1”, có nghĩa giá trị của thuộc tính code của đối tượng Table sẽ là “123456”.
Bây giờ, chạy lại ví dụ, các bạn sẽ nhận được kết quả như sau:

4.7/5 - (4 bình chọn)

Add Comment