+1

Spring Boot In Action: Essential concepts for source code analysis.

Mayfest2023

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.

@Value("${config.file.path}")
private String filePath;

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.

public class AnnotationConfigApplicationContext extends GenericApplicationContext implements AnnotationConfigRegistry {

	private final AnnotatedBeanDefinitionReader reader;
	private final ClassPathBeanDefinitionScanner scanner;

image.png

===

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

Thanks for reading.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí