การจัดการเหตุการณ์ในฤดูใบไม้ผลิ

คุณได้เห็นในทุกบทแล้วว่าแกนกลางของฤดูใบไม้ผลิคือ ApplicationContextซึ่งจัดการวงจรชีวิตที่สมบูรณ์ของถั่ว ApplicationContext เผยแพร่เหตุการณ์บางประเภทเมื่อโหลดถั่ว ตัวอย่างเช่นContextStartedEventถูกเผยแพร่เมื่อบริบทเริ่มต้นและContextStoppedEventถูกเผยแพร่เมื่อบริบทหยุดทำงาน

การจัดการในเหตุการณ์ApplicationContextให้บริการผ่านApplicationEventชั้นเรียนและApplicationListenerอินเตอร์เฟซ ดังนั้นหาก bean ใช้ApplicationListenerทุกครั้งที่ApplicationEventเผยแพร่ไปยัง ApplicationContext bean นั้นจะได้รับการแจ้งเตือน

Spring จัดให้มีเหตุการณ์มาตรฐานดังต่อไปนี้ -

ซีเนียร์ กิจกรรมและคำอธิบายในตัวของฤดูใบไม้ผลิ
1

ContextRefreshedEvent

เหตุการณ์นี้เผยแพร่เมื่อApplicationContextเริ่มต้นหรือรีเฟรช นอกจากนี้ยังสามารถเพิ่มขึ้นโดยใช้เมธอด refresh () บนอินเทอร์เฟซConfigurableApplicationContext

2

ContextStartedEvent

เหตุการณ์นี้เผยแพร่เมื่อApplicationContextเริ่มต้นโดยใช้เมธอด start () บนอินเทอร์เฟซConfigurableApplicationContext คุณสามารถสำรวจฐานข้อมูลของคุณหรือคุณสามารถรีสตาร์ทแอปพลิเคชันที่หยุดทำงานหลังจากได้รับกิจกรรมนี้

3

ContextStoppedEvent

เหตุการณ์นี้เผยแพร่เมื่อApplicationContextหยุดโดยใช้เมธอด stop () บนอินเทอร์เฟซConfigurableApplicationContext คุณสามารถทำงานแม่บ้านที่จำเป็นได้หลังจากได้รับกิจกรรมนี้

4

ContextClosedEvent

เหตุการณ์นี้เผยแพร่เมื่อปิดApplicationContextโดยใช้เมธอด close () บนอินเทอร์เฟซConfigurableApplicationContext บริบทปิดถึงจุดจบของชีวิต ไม่สามารถรีเฟรชหรือรีสตาร์ทได้

5

RequestHandledEvent

นี่เป็นเหตุการณ์เฉพาะเว็บที่บอกถั่วทั้งหมดว่ามีการให้บริการคำขอ HTTP แล้ว

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

การฟังเหตุการณ์ตามบริบท

ในการฟังเหตุการณ์บริบท bean ควรใช้อินเทอร์เฟซApplicationListenerซึ่งมีเพียงวิธีเดียวonApplicationEvent(). ดังนั้นให้เราเขียนตัวอย่างเพื่อดูว่าเหตุการณ์แพร่กระจายและวิธีที่คุณสามารถใส่โค้ดของคุณเพื่อทำงานที่จำเป็นตามเหตุการณ์บางอย่างได้อย่างไร

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

ขั้นตอน คำอธิบาย
1 สร้างโปรเจ็กต์ด้วยชื่อSpringExampleและสร้างแพ็คเกจcom.tutorialspointภายใต้ไฟล์src โฟลเดอร์ในโครงการที่สร้างขึ้น
2 เพิ่มไลบรารี Spring ที่จำเป็นโดยใช้ตัวเลือกเพิ่ม JAR ภายนอกตามที่อธิบายไว้ในบทตัวอย่าง Spring Hello World
3 สร้างคลาส Java HelloWorld , CStartEventHandler , CStopEventHandlerและ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);
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ CStartEventHandler.java ไฟล์

package com.tutorialspoint;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStartedEvent;

public class CStartEventHandler 
   implements ApplicationListener<ContextStartedEvent>{

   public void onApplicationEvent(ContextStartedEvent event) {
      System.out.println("ContextStartedEvent Received");
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ CStopEventHandler.java ไฟล์

package com.tutorialspoint;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStoppedEvent;

public class CStopEventHandler 
   implements ApplicationListener<ContextStoppedEvent>{

   public void onApplicationEvent(ContextStoppedEvent event) {
      System.out.println("ContextStoppedEvent Received");
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์

package com.tutorialspoint;

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

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

      // Let us raise a start event.
      context.start();
	  
      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();

      // Let us raise a stop event.
      context.stop();
   }
}

ต่อไปนี้คือไฟล์กำหนดค่า 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">
      <property name = "message" value = "Hello World!"/>
   </bean>

   <bean id = "cStartEventHandler" class = "com.tutorialspoint.CStartEventHandler"/>
   <bean id = "cStopEventHandler" class = "com.tutorialspoint.CStopEventHandler"/>

</beans>

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

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

หากคุณต้องการคุณสามารถเผยแพร่เหตุการณ์ที่กำหนดเองของคุณเองและหลังจากนั้นคุณสามารถบันทึกเหตุการณ์เดียวกันเพื่อดำเนินการกับเหตุการณ์ที่กำหนดเองเหล่านั้นได้ หากคุณสนใจที่จะเขียนเหตุการณ์ที่คุณกำหนดเองคุณสามารถตรวจสอบเหตุการณ์ที่กำหนดเองในฤดูใบไม้ผลิ