स्प्रिंग में इवेंट हैंडलिंग
आपने सभी अध्यायों में देखा है कि वसंत का मूल है ApplicationContext, जो फलियों के पूर्ण जीवन चक्र का प्रबंधन करता है। ApplicationContext सेम को लोड करते समय कुछ प्रकार की घटनाओं को प्रकाशित करता है। उदाहरण के लिए, संदर्भ प्रारंभ होने पर एक ContextStartedEvent प्रकाशित होता है और संदर्भ बंद होने पर ContextStontinEvent प्रकाशित होता है।
ApplicationContext में ईवेंट हैंडलिंग ApplicationEvent वर्ग और ApplicationListener इंटरफ़ेस के माध्यम से प्रदान की जाती है। इसलिए, यदि कोई सेम ApplicationListener को लागू करता है , तो हर बार एक ApplicationEvent ApplicationContext में प्रकाशित हो जाता है, उस सेम को अधिसूचित किया जाता है।
वसंत निम्नलिखित मानक कार्यक्रम प्रदान करता है -
अनु क्रमांक। | वसंत निर्मित घटनाओं और विवरण |
---|---|
1 | ContextRefreshedEvent यह ईवेंट तब प्रकाशित किया जाता है जब ApplicationContext या तो इनिशियलाइज़ या रिफ्रेश होता है। यह भी कॉन्फ़िगर करने योग्य का उपयोग करके उठाया जा सकता है () कॉन्फ़िगर करने योग्यApplicationContext इंटरफ़ेस पर विधि । |
2 | ContextStartedEvent यह घटना तब प्रकाशित होती है जब ApplicationContext को कॉन्फ़िगरेबल एप्लायसेशन कॉन्टेक्स्ट इंटरफ़ेस पर स्टार्ट () विधि का उपयोग करके शुरू किया जाता है। आप अपने डेटाबेस को प्रदूषित कर सकते हैं या आप इस ईवेंट को प्राप्त करने के बाद किसी भी रुके हुए एप्लिकेशन को पुनः आरंभ कर सकते हैं। |
3 | ContextStoppedEvent यह घटना तब प्रकाशित होती है जब ApplicationContext को कॉन्फ़िगरेबल एप्लायसेशन कॉन्टेक्स्ट इंटरफ़ेस पर स्टॉप () विधि का उपयोग करके रोका जाता है। आप इस घटना को प्राप्त करने के बाद आवश्यक हाउसकीप कार्य कर सकते हैं। |
4 | ContextClosedEvent इस घटना को तब प्रकाशित किया जाता है जब ApplicationContext को कॉन्फ़िगर करने योग्यApplicationContext इंटरफ़ेस पर बंद () विधि का उपयोग करके बंद किया जाता है। एक बंद संदर्भ जीवन के अंत तक पहुंचता है; इसे रिफ्रेश या रीस्टार्ट नहीं किया जा सकता है। |
5 | RequestHandledEvent यह एक वेब-विशिष्ट घटना है जो सभी बीन्स को बताती है कि एक HTTP अनुरोध सेवित किया गया है। |
स्प्रिंग की ईवेंट हैंडलिंग एकल-थ्रेडेड है इसलिए यदि कोई ईवेंट प्रकाशित किया जाता है, जब तक और जब तक कि सभी रिसीवर्स को मैसेज न मिल जाए, प्रॉसेस ब्लॉक हो जाते हैं और फ्लो जारी नहीं रहेगा। इसलिए, अपने एप्लिकेशन को डिज़ाइन करते समय ध्यान रखा जाना चाहिए यदि इवेंट हैंडलिंग का उपयोग किया जाना है।
प्रसंग प्रसंग सुनकर
एक संदर्भ घटना को सुनने के लिए, एक सेम को ApplicationListener इंटरफ़ेस को लागू करना चाहिए जिसमें केवल एक विधि हैonApplicationEvent()। तो आइए एक उदाहरण लिखें कि कैसे घटनाओं का प्रसार होता है और आप कुछ विशेष घटनाओं के आधार पर आवश्यक कार्य करने के लिए अपना कोड कैसे डाल सकते हैं।
आइए हम एक काम कर रहे ग्रहण आईडीई को जगह दें और स्प्रिंग एप्लिकेशन बनाने के लिए निम्नलिखित कदम उठाएं -
कदम | विवरण |
---|---|
1 | SpringExample नाम से एक प्रोजेक्ट बनाएँ और के तहत एक पैकेज com.tutorialspoint बनाएँsrc बनाया परियोजना में फ़ोल्डर। |
2 | स्प्रिंग हैलो वर्ल्ड उदाहरण अध्याय में बताए अनुसार बाहरी जार विकल्प का उपयोग करके आवश्यक स्प्रिंग लाइब्रेरी जोड़ें । |
3 | जावा वर्गों बनाएं HelloWorld , CStartEventHandler , CStopEventHandler और MainApp तहत com.tutorialspoint पैकेज। |
4 | के तहत बीन्स कॉन्फ़िगरेशन फ़ाइल Beans.xml बनाएँsrc फ़ोल्डर। |
5 | अंतिम चरण सभी जावा फ़ाइलों और बीन कॉन्फ़िगरेशन फ़ाइल की सामग्री बनाना और नीचे बताए अनुसार एप्लिकेशन चलाना है। |
यहाँ की सामग्री है 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
यदि आप चाहें, तो आप अपनी खुद की कस्टम घटनाओं को प्रकाशित कर सकते हैं और बाद में आप उन कस्टम घटनाओं के खिलाफ कोई भी कार्रवाई करने के लिए उसी पर कब्जा कर सकते हैं। यदि आप अपनी स्वयं की कस्टम ईवेंट लिखने में रुचि रखते हैं, तो आप स्प्रिंग में कस्टम ईवेंट की जांच कर सकते हैं ।