ฤดูใบไม้ผลิ - วงจรชีวิตของถั่ว

วงจรชีวิตของถั่วฝักยาวนั้นเข้าใจง่าย เมื่อถั่วถูกสร้างอินสแตนซ์อาจจำเป็นต้องทำการเริ่มต้นบางอย่างเพื่อให้มันอยู่ในสถานะที่ใช้งานได้ ในทำนองเดียวกันเมื่อไม่จำเป็นต้องใช้ถั่วอีกต่อไปและถูกนำออกจากภาชนะอาจต้องมีการล้างข้อมูลบางอย่าง

แม้ว่าจะมีรายการกิจกรรมที่เกิดขึ้นเบื้องหลังระหว่างช่วงเวลาของการสร้างอินสแตนซ์ของถั่วและการทำลายล้าง แต่บทนี้จะกล่าวถึงวิธีการเรียกกลับวงจรชีวิตของถั่วที่สำคัญเพียงสองวิธีซึ่งจำเป็นในช่วงเวลาของการเริ่มต้นถั่วและการทำลายมัน

ในการกำหนดการตั้งค่าและการแยกย่อยสำหรับ bean เราเพียงแค่ประกาศ <bean> ด้วย initmethod และ / หรือ destroy-methodพารามิเตอร์ แอตทริบิวต์ init-method ระบุเมธอดที่จะเรียกใช้บน bean ทันทีที่สร้างอินสแตนซ์ ในทำนองเดียวกันวิธีการทำลายจะระบุวิธีการที่เรียกว่าก่อนที่ถั่วจะถูกนำออกจากคอนเทนเนอร์

การเรียกกลับการเริ่มต้น

อินเทอร์เฟซ org.springframework.beans.factoryInitializingBean ระบุวิธีการเดียว -

void afterPropertiesSet() throws Exception;

ดังนั้นคุณสามารถใช้อินเทอร์เฟซด้านบนและงานเริ่มต้นสามารถทำได้ภายในเมธอด afterPropertiesSet () ดังนี้ -

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

ในกรณีของข้อมูลเมตาการกำหนดค่าตาม XML คุณสามารถใช้ไฟล์ init-methodแอตทริบิวต์เพื่อระบุชื่อของวิธีการที่มีลายเซ็นไม่มีอาร์กิวเมนต์เป็นโมฆะ ตัวอย่างเช่น -

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

ต่อไปนี้เป็นคำจำกัดความของคลาส -

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

การเรียกกลับการทำลายล้าง

org.springframework.beans.factory.DisposableBeanอินเตอร์เฟซที่ระบุวิธีการเดียว -

void destroy() throws Exception;

ดังนั้นคุณสามารถใช้อินเทอร์เฟซด้านบนและงานสุดท้ายสามารถทำได้ภายในวิธีการ destroy () ดังนี้ -

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

ในกรณีของข้อมูลเมตาการกำหนดค่าตาม XML คุณสามารถใช้ไฟล์ destroy-methodแอตทริบิวต์เพื่อระบุชื่อของวิธีการที่มีลายเซ็นไม่มีอาร์กิวเมนต์เป็นโมฆะ ตัวอย่างเช่น -

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

ต่อไปนี้เป็นคำจำกัดความของคลาส -

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

หากคุณใช้คอนเทนเนอร์ IoC ของ Spring ในสภาพแวดล้อมที่ไม่ใช่เว็บแอปพลิเคชัน ตัวอย่างเช่นในสภาพแวดล้อมเดสก์ท็อปไคลเอ็นต์ที่สมบูรณ์คุณลงทะเบียน hook การปิดระบบด้วย JVM การทำเช่นนี้ช่วยให้มั่นใจได้ว่าการปิดเครื่องจะเป็นไปอย่างราบรื่นและเรียกใช้เมธอดการทำลายที่เกี่ยวข้องกับถั่วเดี่ยวของคุณเพื่อให้ทรัพยากรทั้งหมดถูกปลดปล่อย

ขอแนะนำว่าอย่าใช้การเรียกกลับ InitializingBean หรือ DisposableBean เนื่องจากการกำหนดค่า XML ให้ความยืดหยุ่นมากในแง่ของการตั้งชื่อวิธีการของคุณ

ตัวอย่าง

ให้เรามี Eclipse IDE ที่ใช้งานได้และทำตามขั้นตอนต่อไปนี้เพื่อสร้างแอปพลิเคชัน Spring -

ขั้นตอน คำอธิบาย
1 สร้างโปรเจ็กต์ด้วยชื่อSpringExampleและสร้างแพ็คเกจcom.tutorialspointภายใต้ไฟล์src โฟลเดอร์ในโครงการที่สร้างขึ้น
2 เพิ่มไลบรารี Spring ที่จำเป็นโดยใช้ตัวเลือกเพิ่ม JAR ภายนอกตามที่อธิบายไว้ในบทตัวอย่าง Spring Hello World
3 สร้างคลาส Java HelloWorldและMainAppภายใต้แพ็คเกจcom.tutorialspoint
4 สร้างไฟล์คอนฟิกูเรชัน Beans Beans.xmlภายใต้ไฟล์src โฟลเดอร์
5 ขั้นตอนสุดท้ายคือการสร้างเนื้อหาของไฟล์ Java และไฟล์ Bean Configuration และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

นี่คือเนื้อหาของ HelloWorld.java ไฟล์ -

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.");
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.javaไฟล์. ที่นี่คุณต้องลงทะเบียน hook การปิดระบบregisterShutdownHook()วิธีการที่ประกาศบนคลาส AbstractApplicationContext วิธีนี้จะช่วยให้มั่นใจได้ว่าการปิดเครื่องจะเป็นไปอย่างราบรื่นและเรียกใช้วิธีการทำลายล้าง

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();
   }
}

ต่อไปนี้คือไฟล์กำหนดค่า Beans.xml จำเป็นสำหรับวิธีการเริ่มต้นและทำลาย -

<?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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เรารันแอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้ -

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

วิธีการเริ่มต้นเริ่มต้นและทำลาย

หากคุณมีถั่วมากเกินไปที่มีการเริ่มต้นและ / หรือทำลายวิธีการที่มีชื่อเดียวกันคุณไม่จำเป็นต้องประกาศ init-method และ destroy-methodในแต่ละถั่ว แต่กรอบงานให้ความยืดหยุ่นในการกำหนดค่าสถานการณ์ดังกล่าวโดยใช้default-init-method และ default-destroy-method แอตทริบิวต์ขององค์ประกอบ <beans> ดังต่อไปนี้ -

<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>