Nói thêm về AutowiredAnnotationBeanPostProcessor

Trong bài viết trước về bean autowiring sử dụng @Autowired annotation, mình có đề cập đến đối tượng AutowiredAnnotationBeanPostProcessor được sử dụng để tự động đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc. Chắc một số bạn cũng thắc mắc là đối tượng này làm thế nào để làm được điều đó phải ko nhỉ? Mình cũng vậy, và đó là lý do mình đã lướt qua code của class AutowiredAnnotationBeanPostProcessor để xem đối tượng này thực sự đã làm những gì?

OK, đầu tiên mình đọc constructor của nó, nội dung như sau:

Ở đây, các bạn thấy, class này có một biến tên là autowiredAnnotationTypes chứa thông tin của ba class là Autowired.class, Value.classInject.class. Nó là biến kiểu Set các bạn ạ:

và biến này được sử dụng trong 3 phương thức khác nhau nhằm mục đích xử lý cho 3 annotation là @Autowired, @Value@Inject.

Hãy xem đó là ba phương thức nào nhé các bạn:

Phương thức này dùng cho @Autowired annotation.

Phương thức này dùng cho @Value annotation. Công dụng của annotation này mình sẽ nói trong những bài sau nhé các bạn.

Phương thức này dùng cho @Inject annotation nhé các bạn. Công dụng của annotation mình cũng sẽ đề cập trong những bài viết sau.

Điểm chung của ba phương thức trên là nó gọi tới một phương thức khác có tên gọi là findAutowiringMetadata. Và trong phương thức này có phương thức buildAutowiringMetadata, đọc phương thức buildAutowiringMetadata bạn sẽ hình dung đối tượng AutowiredAnnotationBeanPostProcessor đã làm gì để xử lý trong các trường hợp bạn khai báo @Autowired annotation ở biến, ở method và ở constructor. Tương tự cho @Value annotation và @Inject annotation.

Xem qua hai phương thức mình vừa nói nhé các bạn.

Mình nghĩ các bạn có thể đọc hiểu những đoạn code này, có vấn đề gì cứ hỏi mình nhé.

5/5 - (1 bình chọn)

2 thoughts on “Nói thêm về AutowiredAnnotationBeanPostProcessor

Add Comment