Tổng Kết Module: Làm Chủ Toàn Diện Container Internals
Tổng kết module Container Internals: cấu trúc dữ liệu BeanFactory, giải mã 12 bước refresh, phân biệt BFPP với BPP và cơ chế nạp Resource.
Bạn vừa hoàn thành việc bóc tách toàn diện bên trong cỗ máy IoC Container của Spring Framework. Dưới đây là bảng tổng hợp kiến thức cốt lõi giúp tra cứu nhanh chóng và hệ thống.
Bảng tổng kết kiến thức cốt lõi (Cheat Sheet)
| Khái niệm | Bản chất kỹ thuật cốt lõi | Bài học chi tiết |
|---|---|---|
| BeanFactory | Giao diện tối thiểu tra cứu bean; cơ chế nạp lười (Lazy) mặc định | 01-beanfactory-vs-applicationcontext |
| DefaultListableBeanFactory | Trái tim lưu trữ: beanDefinitionMap (siêu dữ liệu) + singletonObjects (instance) | 01-beanfactory-vs-applicationcontext |
| Singleton Scope | Một entry lưu trong singletonObjects của container; không phải static toàn JVM | 01-beanfactory-vs-applicationcontext |
| ApplicationContext | Bọc DefaultListableBeanFactory (Composition) + 4 capability enterprise; nạp Eager | 01-beanfactory-vs-applicationcontext |
| refresh() 12 bước | Chu trình 3 giai đoạn: Chuẩn bị -> Biến đổi metadata (BFPP/BPP) -> Cấp phát bean | 02-refresh-lifecycle |
| BeanDefinition | Bản vẽ kỹ thuật lưu siêu dữ liệu (class, scope, dependencies) trước khi tạo instance | 03-beandefinition-bfpp |
| BFPP vs BPP | BFPP sửa metadata (bước 5); BPP biến đổi instance và bọc proxy (bước 11) | 03-beandefinition-bfpp |
| Environment | Quản lý properties và profiles; thứ tự ưu tiên: Command-line > System Property > Env Var | 04-environment-propertysource |
| Relaxed Binding | Tự động ánh xạ linh hoạt: biến môi trường POSIX APP_URL sang property app.url | 04-environment-propertysource |
| Resource | Trừu tượng hóa truy xuất file qua getInputStream(); classpath*: quét đa JAR | 05-resource-springbootapplication |
| @SpringBootApplication | Meta-annotation hợp nhất: @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan | 05-resource-springbootapplication |
| Mini IoC Container | Tự tay hiện thực container bằng Java qua Reflection + Topological Sort | 06-mini-challenge-mini-ioc |
Mô hình tư duy cốt lõi (Mental Model)
Một Spring Container thực chất = một
DefaultListableBeanFactory= vài bảng băm lưu trữ. Phương thứcrefresh()chịu trách nhiệm lấp đầy các bảng băm đó qua 12 bước tuần tự. Loại bỏ lớp vỏ "phép thuật", Spring Container chính là cặp ánh xạMap<String, BeanDefinition>vàMap<String, Object>cùng logic xử lý phụ thuộc bao quanh.
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Explain BeanFactory vs ApplicationContext và data structure thật (singletonObjects, beanDefinitionMap)
- Trace refresh() 12 bước qua 3 giai đoạn biến config thành runtime container
- Compare BeanFactoryPostProcessor (metadata) vs BeanPostProcessor (instance) và BeanDefinition
- Implement externalized config với Environment + PropertySource đúng thứ tự ưu tiên
- Diagnose lỗi container (bean không scan, sai thứ tự property) qua Resource + @SpringBootApplication
Liên hệ các module khác
- Nhập môn & IoC/DI — Nền tảng triết lý IoC và các hình thức Dependency Injection.
- Bean Lifecycle & Scopes — Bước 11 của
refresh()mở rộng thành vòng đời chi tiết và các phạm vi bean. - Spring Boot Autoconfig — Cơ chế
@EnableAutoConfigurationvà điều kiện nạp bean.
Module tiếp theo: Bean Lifecycle & Scopes — Vòng Đời Và Phạm Vi Bean
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Mini-challenge: tự build mini IoC container 80 dòng
Bài tiếp Bean Lifecycle & ScopesVòng Đời Và Phạm Vi Hoạt Động Của Bean Trong Spring
Thảo luận & góp ý
Hỏi đáp về bài này