Spring Boot In Action: Essential concepts for source code analysis.
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).
4. BeanDefinitionHolder
BeanDefinitionHolder = BeanDefinition + beanName + alias.
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;
===
Sẽ còn tiếp tục update...
Thanks for reading.
All rights reserved