SPRING BEAN LÀ GÌ

     

1. Bean và ApplicationContext là gì?

1.1. Bean là gì?

Trong documentation của Spring framework, thì bean được định nghĩa như sau:

In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.

Bạn đang xem: Spring bean là gì

Bạn đang xem: Spring bean là gì

Nói một cách đơn giản, bean là những module chính của chương trình, được tạo ra và quản lý bởi Spring IoC container.

Các bean có thể phụ thuộc lẫn nhau, như ví dụ về Car, Engine và ChinaEngine từ đầu series tới giờ. Sự phụ thuộc này được mô tả cho IoC biết nhờ cơ chế Dependency injection.

Cách đánh dấu class là một bean thì mình sẽ trình bày trong bài tiếp theo. Lúc này các bạn chỉ cần biết đơn giản nhất là dùng Component lên class là class đó là một bean.

1.2. ApplicationContext là gì?

ApplicationContext là khái niệm Spring Boot dùng để chỉ Spring IoC container, tương tự như bean là đại diện cho các dependency.

Xem thêm: Tại Sao Nhắn Tin Messenger Không Được Trên Máy Tính, Cách Khắc Phục Lỗi Messenger Hiệu Quả Nhất


*

Khi ứng dụng Spring chạy, Spring IoC container sẽ quét toàn bộ packages, tìm ra các bean và đưa vào ApplicationContext. Cơ chế đó là Component scan, cũng sẽ được nói tới trong bài tiếp theo.

1.3. Cách lấy bean ra từ Context

Tất nhiên trước khi lấy bean ra từ context thì phải có context rồi

*

Có thể hiểu do Spring Boot đã tìm thấy hai bean phù hợp để inject vào Car. Do cả hai VNEngine và ChinaEngine đều implements Engine, mà Car cần Engine nên không biết nên chọn cái nào.

3.2. Giải pháp

Có hai cách giải quyết vấn đề này. Thứ nhất là dùng Primary đánh dấu lên một bean. Khi đó bean này sẽ được ưu tiên chọn hơn, trong trường hợp có nhiều bean phù hợp trong context.

Xem thêm: Đánh Giá Xiaomi Redmi Note 10 Pro : Tính Năng Cao Cấp Dành Cho Mọi Người

Componentpublic class Car { Autowired Qualifier("VNEngine") // Phải khớp hoa thường luôn nhe private final Engine engine;}Đối với constructor hay setter based cũng tương tự, chỉ cần có Qualifier trước tên field cần inject vào là được.

Okay thế là bài viết hôm nay đã xong. Hai bài viết về bean và context của mình hi vọng sẽ mang đến cho các bạn đủ các kiến thức cơ bản để đi tiếp những phần sau của series. Cảm ơn và nhớ upvote hoặc clip để ủng hộ mình nhé. Thân!