वसंत - बीन जीवन चक्र
एक स्प्रिंग बीन के जीवन चक्र को समझना आसान है। जब एक बीन तुरंत तैयार की जाती है, तो इसे एक उपयोगी अवस्था में लाने के लिए कुछ प्रारंभिक प्रदर्शन करने की आवश्यकता हो सकती है। इसी तरह, जब बीन की आवश्यकता नहीं होती है और कंटेनर से निकाल दिया जाता है, तो कुछ सफाई की आवश्यकता हो सकती है।
हालांकि, बीन इंस्टेंटेशन के समय और इसके विनाश के बीच दृश्य के पीछे होने वाली गतिविधियों की सूची है, इस अध्याय में केवल दो महत्वपूर्ण बीन जीवन चक्र कॉलबैक विधियों पर चर्चा की जाएगी, जो बीन इनिशियलाइज़ेशन और इसके विनाश के समय आवश्यक हैं।
एक बीन के लिए सेटअप और फाड़ को परिभाषित करने के लिए, हम बस <b> के साथ की घोषणा करते हैं initmethod और / या destroy-methodमापदंडों। Init- विधि विशेषता एक विधि को निर्दिष्ट करती है जिसे तुरंत बीन पर तुरंत बुलाया जाता है। इसी तरह, डिस्ट्रोइमेथोड एक विधि को निर्दिष्ट करता है जिसे कंटेनर से निकालने से ठीक पहले कहा जाता है।
प्रारंभिक कॉलबैक
Org.springframework.beans.factory.InitializingBean इंटरफ़ेस एक एकल विधि निर्दिष्ट करता है -
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;
इस प्रकार, आप बस उपरोक्त इंटरफ़ेस को लागू कर सकते हैं और अंतिम रूप देने का काम नष्ट () विधि के अंदर किया जा सकता है -
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 कंटेनर का उपयोग कर रहे हैं; उदाहरण के लिए, एक अमीर क्लाइंट डेस्कटॉप वातावरण में, आप JVM के साथ शटडाउन हुक को पंजीकृत करते हैं। ऐसा करने से एक सुंदर शटडाउन सुनिश्चित होता है और आपके सिंगलटन बीन्स पर प्रासंगिक नष्ट तरीकों को कॉल करता है ताकि सभी संसाधन जारी हो सकें।
यह अनुशंसा की जाती है कि आप InitializingBean या डिस्पोजेबल बीनबैक का उपयोग न करें, क्योंकि XML कॉन्फ़िगरेशन आपके नामकरण के संदर्भ में बहुत लचीलापन देता है।
उदाहरण
आइए हम एक काम कर रहे ग्रहण आईडीई को जगह दें और स्प्रिंग एप्लिकेशन बनाने के लिए निम्नलिखित कदम उठाएं -
कदम | विवरण |
---|---|
1 | SpringExample नाम से एक प्रोजेक्ट बनाएँ और के तहत एक पैकेज com.tutorialspoint बनाएँsrc बनाया परियोजना में फ़ोल्डर। |
2 | स्प्रिंग हैलो वर्ल्ड उदाहरण अध्याय में बताए अनुसार बाहरी जार विकल्प का उपयोग करके आवश्यक स्प्रिंग लाइब्रेरी जोड़ें । |
3 | Com.tutorialspoint पैकेज के तहत Java कक्षाएं HelloWorld और MainApp बनाएं । |
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);
}
public void init(){
System.out.println("Bean is going through init.");
}
public void destroy() {
System.out.println("Bean will destroy now.");
}
}
निम्नलिखित की सामग्री है MainApp.javaफ़ाइल। यहां आपको शटडाउन हुक को पंजीकृत करने की आवश्यकता है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 init और विध्वंस विधियों के लिए आवश्यक -
<?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 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>