Chia sẻ kiến thức lập trình

Spring – ApplicationContext

Trái tim của Spring!

ApplicationContext là nơi chứa tất cả cấu hình, các bean (các đối tượng singleton và prototype) của chương trình mà nó thu thập được hoặc do chúng ta chủ động set vào, bên cạnh đó nó cũng publish các sự kiện cho chúng ta trong quá trình khởi tạo để cho phép chúng ta làm một số việc chúng ta muốn, ví dụ ContextStartedEvent hay ContextRefreshedEvent.

AnnotationConfigApplicationContext

Spring cung cấp ApplicationContext là một interface và chúng ta sẽ phải lựa chọn lớp cài đặt phù hợp cho mình, và với các tính năng mạnh mẽ của Java Annotation chúng ta thường lựa chọn AnnotationConfigApplicationContext.

Khởi tạo ApplicationContext

Để khởi toạ một application context tương đối đơn giản, chúng ta chỉ cần truyền các tên gói (package) mà có chứa các lớp component (các lớp được annotation với @Configuration, @Component, @Service, @Controller ...) vào cho đối tượng AnnotationConfigApplicationContext và cuối cùng là gọi hàm refresh.

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.tvd12.example.spring_core.config");
context.scan("com.tvd12.example.spring_core.repo");
context.scan("com.tvd12.example.spring_core.service");
context.refresh();

Sau khi gọi context.refresh() thì tất cả các đối tượng sẽ được khởi tạo, tự động set các thuộc tính do ApplicationContext quản lý.

Sử dụng ApplicationContext

Để lấy một đối tượng (bean) từ ApplicationContext, chúng ta chỉ cần gọi hàm getBean như sau:

BookService bookService = context.getBean(BookService.class);

Để import file cấu hình vào ApplicationContext chúng ta cần sử dụng annotation @PropertySource và để lấy một property từ ApplicationContext, chúng ta có thể làm như sau:

Environment environment = context.getEnvironment();
String world = environment.getProperty("hello");

Ví dụ đầy đủ bạn có thể tham khảo tạo Github

Tổng kết

Ở thời điểm của bài viết này thì có lẽ anh em đang dùng spring-boot hết cả rồi, tuy nhiên trái tim là phần quan trọng nhất chúng ta, không biết có lẽ là sự thiếu sót lớn.

Tham khảo

  1. Tạo ApplicationContext
  2. Load properties
  3. Lắng nghe sự kiện
  4. Ví dụ
Share: