Spring Boot In Action: Các khái niệm cần thiết để phân tích mã nguồn.

Tram Ho

1. BeanFactory (aka IOC container)

Đây là interface chịu trách nhiệm cho việc quản lý beans (Factory of Bean).

2. Bean

Bean về bản chất là object nhưng thay vì được quản lý bằng JVM thì sẽ được quản lý bằng Spring IOC container.

3. BeanDefinition

Đây là một interface mô tả bean instance cung cấp các phương thức lấy ra những thông tin cơ bản như beanClassName, scope… Mỗi lần Spring Boot read/scan bean thì sẽ khởi tạo một BeanDefinition object. Và khi chúng ta khai báo bean ở trong @Configuration class thì Spring sẽ khởi tạo một instance của ConfigurationClassBeanDefinition class (which is implements AnnotatedBeanDefinition extends BeanDefinition).

image.png

4. BeanDefinitionHolder

BeanDefinitionHolder = BeanDefinition + beanName + alias.

image.png

5. BeanDefinitionRegistry

Đây là một interface cung cấp các phương thức hỗ trợ việc đăng ký BeanDefinition với BeanFactory như registerBeanDefinition

6. BeanFactoryPostProcessor

Đây là một interface cung cấp các phương thức giúp xử lý các công việc hậu kỳ sau khi bean được đăng ký. Ví dụ như resolves ${…} placeholders thông qua PropertySourcesPlaceholderConfigurer class.

7. BeanDefinitionRegistryPostProcessor

Đây là special BeanFactoryPostProcessor interface xử lý các việc liên quan đến BeanDefinition. Ví dụ như nếu bạn đánh dấu một class là @Configuration thì giai đoạn scan và register tất cả các phương thức được đánh dấu @Bean sẽ được thực hiện thông qua ConfigurationClassPostProcessor class (implements BeanDefinitionRegistryPostProcessor).

8. PostProcessorRegistrationDelegate

Vừa rồi mình mới giới thiệu các post-processor class cho bean, và PostProcessorRegistrationDelegate class là nơi mà tất cả trong số đó sẽ được gọi ra để sử dụng.

9. AnnotationConfigApplicationContext

Đây là một concrete class implements interface BeanDefinitionRegistry nên giống nhau về mặt chức năng nhưng để nói cụ thể hơn thì AnnotationConfigApplicationContext có 2 variables lần lượt là ClassPathBeanDefinitionScanner dùng để scan packages và convert classes thành BeanDefinitions, AnnotatedBeanDefinitionReader dùng để register BeanDefinitions.

image.png

===

Sẽ còn tiếp tục update…

Thanks for reading.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo