Mùa xuân - Vòng đời của đậu

Vòng đời của Spring bean rất dễ hiểu. Khi một bean được khởi tạo, nó có thể được yêu cầu thực hiện một số khởi tạo để đưa nó vào trạng thái có thể sử dụng được. Tương tự, khi đậu không còn cần thiết và được lấy ra khỏi thùng chứa, có thể cần phải dọn dẹp một chút.

Mặc dù vậy, có danh sách các hoạt động diễn ra đằng sau hậu trường từ thời điểm bean Instantiation đến khi nó bị phá hủy, chương này sẽ chỉ thảo luận về hai phương pháp gọi lại vòng đời bean quan trọng, được yêu cầu tại thời điểm khởi tạo bean và sự phá hủy của nó.

Để xác định thiết lập và chia nhỏ cho một bean, chúng ta chỉ cần khai báo <bean> với initmethod và / hoặc destroy-methodthông số. Thuộc tính init-method chỉ định một phương thức sẽ được gọi trên bean ngay sau khi khởi tạo. Tương tự như vậy, Destmethod chỉ định một phương thức được gọi ngay trước khi một bean bị xóa khỏi vùng chứa.

Gọi lại khởi tạo

Giao diện org.springframework.beans.factory.InitializingBean chỉ định một phương thức duy nhất:

void afterPropertiesSet() throws Exception;

Vì vậy, bạn có thể thực hiện đơn giản giao diện trên và công việc khởi tạo có thể được thực hiện bên trong phương thức afterPropertiesSet () như sau:

public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work
   }
}

Trong trường hợp siêu dữ liệu cấu hình dựa trên XML, bạn có thể sử dụng init-methodđể xác định tên của phương thức có chữ ký void no-đối số. Ví dụ -

<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>

Sau đây là định nghĩa lớp -

public class ExampleBean {
   public void init() {
      // do some initialization work
   }
}

Lệnh gọi lại hủy

Các org.springframework.beans.factory.DisposableBean giao diện xác định một phương pháp duy nhất -

void destroy() throws Exception;

Do đó, bạn có thể đơn giản triển khai giao diện trên và công việc hoàn thiện có thể được thực hiện bên trong phương thức hủy () như sau:

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

Trong trường hợp siêu dữ liệu cấu hình dựa trên XML, bạn có thể sử dụng destroy-methodđể xác định tên của phương thức có chữ ký void no-đối số. Ví dụ -

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>

Sau đây là định nghĩa lớp -

public class ExampleBean {
   public void destroy() {
      // do some destruction work
   }
}

Nếu bạn đang sử dụng vùng chứa IoC của Spring trong môi trường ứng dụng không phải web; ví dụ: trong môi trường máy tính để bàn ứng dụng khách phong phú, bạn đăng ký một hook tắt máy với JVM. Làm như vậy đảm bảo việc tắt một cách dễ dàng và gọi các phương thức hủy có liên quan trên các hạt đậu đơn của bạn để tất cả tài nguyên được giải phóng.

Bạn không nên sử dụng lệnh gọi lại InitializingBean hoặc DisposableBean, bởi vì cấu hình XML mang lại nhiều linh hoạt về cách đặt tên cho phương thức của bạn.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse đang hoạt động và thực hiện các bước sau để tạo một ứng dụng Spring -

Các bước Sự miêu tả
1 Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Spring bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World .
3 Tạo các lớp Java HelloWorldMainApp theo gói com.tutorialspoint .
4 Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục.
5 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của HelloWorld.java tập tin -

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
   public void init(){
      System.out.println("Bean is going through init.");
   }
   public void destroy() {
      System.out.println("Bean will destroy now.");
   }
}

Sau đây là nội dung của MainApp.javatập tin. Ở đây bạn cần đăng ký một hook tắt máyregisterShutdownHook()phương thức được khai báo trên lớp AbstractApplicationContext. Điều này sẽ đảm bảo tắt máy một cách duyên dáng và gọi các phương thức hủy có liên quan.

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
      context.registerShutdownHook();
   }
}

Sau đây là tệp cấu hình Beans.xml cần thiết cho các phương thức init và hủy -

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" init-method = "init" 
      destroy-method = "destroy">
      <property name = "message" value = "Hello World!"/>
   </bean>

</beans>

Khi bạn đã hoàn tất việc tạo các tệp cấu hình nguồn và bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

Phương thức khởi tạo và hủy mặc định

Nếu bạn có quá nhiều bean có phương thức khởi tạo và / hoặc hủy có cùng tên, bạn không cần khai báo init-methoddestroy-methodtrên từng hạt đậu. Thay vào đó, khuôn khổ cung cấp sự linh hoạt để định cấu hình tình huống như vậy bằng cách sử dụngdefault-init-methoddefault-destroy-method các thuộc tính trên phần tử <beans> như sau:

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
   default-init-method = "init" 
   default-destroy-method = "destroy">

   <bean id = "..." class = "...">
      <!-- collaborators and configuration for this bean go here -->
   </bean>
   
</beans>