ฤดูใบไม้ผลิ - วงจรชีวิตของถั่ว
วงจรชีวิตของถั่วฝักยาวนั้นเข้าใจง่าย เมื่อถั่วถูกสร้างอินสแตนซ์อาจจำเป็นต้องทำการเริ่มต้นบางอย่างเพื่อให้มันอยู่ในสถานะที่ใช้งานได้ ในทำนองเดียวกันเมื่อไม่จำเป็นต้องใช้ถั่วอีกต่อไปและถูกนำออกจากภาชนะอาจต้องมีการล้างข้อมูลบางอย่าง
แม้ว่าจะมีรายการกิจกรรมที่เกิดขึ้นเบื้องหลังระหว่างช่วงเวลาของการสร้างอินสแตนซ์ของถั่วและการทำลายล้าง แต่บทนี้จะกล่าวถึงวิธีการเรียกกลับวงจรชีวิตของถั่วที่สำคัญเพียงสองวิธีซึ่งจำเป็นในช่วงเวลาของการเริ่มต้นถั่วและการทำลายมัน
ในการกำหนดการตั้งค่าและการแยกย่อยสำหรับ 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>