Tổng quan về Spring Bean


1. Định nghĩa:

Bean là một phần không thể thiếu trong Spring Boot. Để hiểu rõ hơn về Spring, việc tìm hiểu về Bean cũng rất quan trọng. Theo định nghĩa trong tài liệu của Spring Framework:

Trong Spring, các đối tượng là nền tảng của ứng dụng và được quản lý bởi container Spring IoC được gọi là beans. Bean là một đối tượng được khởi tạo, lắp ráp và quản lý bởi container Spring IoC.

2. Inversion of Control (IoC)

IoC có thể được hiểu đơn giản như là việc một đối tượng khởi tạo các phụ thuộc(dependencies) mà không cần phải khởi tạo chúng. Các đối tượng này giao phó (delegates) việc xây dựng và khởi tạo các phụ thuộc vào các Ioc Container.

Ioc Container: đóng vai trò là nơi khởi tạo, cấu hình và nhúng các đối tượng vào các phụ thuộc và quản lý vòng đời của chúng. Nó sử dụng Dependency Injection (DI) để quản lý các thành phần tạo nên ứng dụng và lấy thông tin dữ liệu từ các file cấu hình (XML) hoặc các annotations.

Ví dụ, một lớp Person có một thuộc tính là Animal:

public class Person {
    private Animal animal;

    public Person(Animal animal) {
        this.animal = animal;
    }
    // getter, setter
}

Giả sử Animal có hai thuộc tính là nameage. Khi khởi tạo một đối tượng Person, ta làm như sau:

Animal animal = new Animal("fuffy", 5);
Person person = new Person(animal);

Cách khởi tạo như trên không sai. Tuy nhiên, hãy tưởng tượng nếu lớp Animal thay đổi (thêm thuộc tính mới, thay đổi thuộc tính hiện có,..) thì lớp Person cũng sẽ phải thay đổi theo. Với việc quản lý khi có nhiều lệnh khởi tạo như vậy, sẽ mất rất nhiều thời gian và khó quản lý.

Có Thể Bạn Quan Tâm :   Từ tượng hình là gì? Ví dụ từ tượng hình

Chính vì vậy, tính năng của Inversion of Control được ứng dụng vào trong trường hợp này.

@Configuration
public class Config {
    @Bean
    public Animal getAnimal() {
        return new Animal("Fuffy", 5);
    }
}

@Component
public class Person {
    @Autowired
    private Animal animal;
    // ...
}

Bây giờ, lớp Person sẽ được tiêm (inject) một đối tượng của lớp Animal.

Ở đây, có 2 Bean được khai báo, đó là Animal và Person.

  1. @Component: là chú thích dành cho lớp, mặc định đại diện cho một giá trị bean với tên giống tên lớp bắt đầu bằng chữ cái viết thường. Nó cũng có thể chỉ định tên khác bằng cách truyền tham số vào chú thích.
  2. @Repository: là chú thích dành cho lớp, đại diện cho một lớp Data Access Object (DAO).
  3. @Service: là chú thích dành cho lớp, đại diện cho một nơi xử lý nghiệp vụ của hệ thống và có thể được sử dụng lại ở nhiều vị trí.
  4. @Controller: là chú thích dành cho lớp, đại diện cho một lớp Controller trong mô hình MVC.
  5. Configuration: là chú thích dành cho lớp, là nơi có thể chứa các khai báo là bean thông qua chú thích @Bean.
  • Singleton: container chỉ khởi tạo một phiên bản của bean và trả về chính nó nếu có yêu cầu.
  • Prototype: mỗi khi có yêu cầu, container sẽ tạo ra một phiên bản mới và trả về.
  • Request: khởi tạo phiên bản cho một HTTP Request.
  • Session: khởi tạo phiên bản cho một HTTP Session.
  • Application: khởi tạo phiên bản cho một vòng đời của ServletContext.
  • WebSocket: khởi tạo phiên bản cho một Websocket Session.
Có Thể Bạn Quan Tâm :   Số 11 tiếng anh là gì? Đọc số mười một trong tiếng anh như thế nào

Vòng đời của bean bao gồm các bước sau:

  • Bean Definition: khởi tạo bean thông qua việc sử dụng các chú thích hoặc XML.
  • Bean Instantiation: Spring khởi tạo các đối tượng Bean giống như việc khởi tạo các đối tượng Java thông thường và đưa chúng vào ApplicationContext.
  • Populating Bean properties: Spring quét các bean, thực hiện các Aware interfaces và thiết lập các giá trị cho các thuộc tính như id, scope và giá trị mặc định được khai báo trong bean đó.
  • Pre-Initialization: Phương thức postProcessBeforeInitialization() bắt đầu được thực thi và @PostConstruct thực hiện sau đó.
  • AfterPropertiesSet: Spring thực hiện phương thức afterPropertiesSet() của các bean đã thực hiện InitializingBean.
  • Custom Initialization: Spring kích hoạt các phương thức khởi tạo với các thuộc tính được xác định trong initMethod trong chú thích @Bean.
  • Post-Initialization: BeanPostProcessors của Spring hoạt động lần thứ hai. Lần này, chúng kích hoạt các phương thức postProcessAfterInitialization().
  • Ready: Các Bean đã được khởi tạo và được inject vào các phụ thuộc.
  • Pre-Destroy: Spring kích hoạt các phương thức được chú thích @PreDestroy trong bước này.
  • Destroy: Spring thực thi các phương thức destroy().
  • Custom Destruction: Ta có thể tùy chỉnh thời điểm hủy bằng thuộc tính destroyMethod trong chú thích @Bean và Spring sẽ thực thi nó trong giai đoạn cuối cùng.
Có Thể Bạn Quan Tâm :   Switch là gì? Các chức năng của switch (thiết bị chuyển mạch)
Back to top button