ApplicationContext
ApplicationContext
là Container cốt lõi trong Spring Framework, quản lý vòng đời của Bean, Dependency Injection (DI) và các tính năng nâng cao như Event Handling, Internationalization, và AOP.
1. Vai Trò của ApplicationContext
Quản lý Bean: Tạo, cấu hình, và quản lý vòng đời Bean.
Hỗ trợ Dependency Injection (DI): Inject dependencies vào Bean.
Hỗ trợ AOP: Áp dụng Aspect-Oriented Programming (AOP).
Hỗ trợ sự kiện (Event Handling): Publish và Listen các sự kiện trong Spring.
Hỗ trợ đa ngôn ngữ (Internationalization - i18n): Quản lý Resource Bundles.
Tích hợp với môi trường (Environment Abstraction): Cung cấp thông tin cấu hình.
2. Các Loại ApplicationContext
Spring cung cấp nhiều loại ApplicationContext
, mỗi loại phù hợp với một trường hợp sử dụng cụ thể.
2.1. ClassPathXmlApplicationContext
Đọc cấu hình từ file XML trong
classpath
.Phù hợp với ứng dụng legacy dùng XML.
2.2. FileSystemXmlApplicationContext
Tương tự
ClassPathXmlApplicationContext
nhưng lấy file XML từ đường dẫn hệ thống.
2.3. AnnotationConfigApplicationContext
Dùng trong ứng dụng hiện đại với cấu hình bằng Annotation (
@Configuration
,@ComponentScan
).
2.4. WebApplicationContext
Dùng trong ứng dụng Spring Web (Spring MVC, Spring Boot).
Có thể được khởi tạo bởi
DispatcherServlet
.
3. Vòng Đời của ApplicationContext
3.1. Quá trình khởi tạo ApplicationContext
Tạo đối tượng ApplicationContext (XML hoặc Java-based).
Quét và khởi tạo Bean từ cấu hình (
@ComponentScan
, XML, v.v.).Inject Dependencies vào Bean (
@Autowired
, Constructor Injection, Setter Injection).Kích hoạt các BeanPostProcessor (
@PostConstruct
,BeanFactoryPostProcessor
).Sẵn sàng phục vụ request.
5. ApplicationContext vs BeanFactory
Đặc điểm
ApplicationContext
BeanFactory
Tạo Bean
Tạo tất cả Bean ngay từ đầu (Eager Initialization)
Tạo Bean khi cần (Lazy Initialization)
Hỗ trợ AOP
✅ Có
❌ Không
Hỗ trợ sự kiện
✅ Có
❌ Không
Hỗ trợ i18n
✅ Có
❌ Không
Khi nào dùng?
Dùng trong ứng dụng Spring chuẩn
Dùng khi cần khởi tạo nhẹ (Embedded Device, IoT, Mobile)
💡 Trong Spring Boot, ApplicationContext là mặc định và hiếm khi dùng BeanFactory
trực tiếp.
Event Handling trong ApplicationContext
ApplicationContext hỗ trợ hệ thống event-driven, giúp Bean lắng nghe các sự kiện trong ứng dụng.
Inject ApplicationContext vào Bean
Spring cho phép inject ApplicationContext
vào một Bean để truy cập các Bean khác.
Kết Luận
🔹 ApplicationContext là Container quan trọng trong Spring, quản lý Bean và Dependency Injection. 🔹 Có nhiều loại ApplicationContext: XML-based, Annotation-based, Web-based. 🔹 Nó hỗ trợ các tính năng như Event Handling, AOP, Transaction, Lazy Initialization. 🔹 ApplicationContext nên được dùng thay vì BeanFactory vì có nhiều tính năng mở rộng.
Last updated