[java] वसंत फ्रेमवर्क वास्तव में क्या है?



Answers

स्प्रिंग में शामिल है ( जैसे स्काफमैन ने सही ढंग से बताया ) एक एमवीसी ढांचा। यहां संक्षेप में व्याख्या करने के लिए मेरे इनपुट हैं। वसंत सेवा परत, वेब परत और व्यापार परत के पृथक्करण का समर्थन करता है, लेकिन यह वास्तव में सबसे अच्छा क्या करता है वस्तुओं का "इंजेक्शन" है। तो यह समझाने के लिए कि उदाहरण के साथ नीचे दिए गए उदाहरण पर विचार करें:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

अब आपके कोड में आपके पास रोडट्रिप नामक एक वर्ग है

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

अब जब भी आप यात्रा का उदाहरण चाहते हैं; कभी-कभी आप एक एसयूवी फोरव्हील शुरू करने के लिए चाहते हैं या कभी-कभी आप सेदान चाहते हैं। यह वास्तव में निर्भर करता है कि आप विशिष्ट स्थिति के आधार पर क्या चाहते हैं।

इस समस्या को हल करने के लिए आप एक फैक्टरी पैटर्न को रचनात्मक पैटर्न के रूप में रखना चाहते हैं। जहां एक कारखाना सही उदाहरण देता है। तो आखिरकार आप वस्तुओं को तुरंत चालू करने के लिए बहुत सारे गोंद कोड के साथ समाप्त हो जाएंगे। स्प्रिंग उस गोंद कोड के बिना सबसे अच्छा गोंद कोड का काम करता है। आप एक्सएमएल में मैपिंग घोषित करते हैं और यह ऑब्जेक्ट्स को स्वचालित रूप से प्रारंभ करता है। यह उदाहरणों के लिए सिंगलटन आर्किटेक्चर का उपयोग करके बहुत कुछ करता है और यह अनुकूलित स्मृति उपयोग में मदद करता है।

इसे नियंत्रण में उलटा भी कहा जाता है। ऐसा करने के लिए अन्य ढांचे हैं Google guice, पिको कंटेनर इत्यादि।

इसके अलावा, वसंत में सत्यापन ढांचा है, जेडीबीसी, आईबेटिस और हाइबरनेट (और कई अन्य) के सहयोग से डीएओ परत के लिए व्यापक समर्थन। डेटाबेस लेनदेन पर उत्कृष्ट लेनदेन नियंत्रण प्रदान करता है।

वसंत के लिए बहुत कुछ है जिसे "प्रो स्प्रिंग" जैसी अच्छी किताबों में पढ़ा जा सकता है।

निम्नलिखित यूआरएल भी मदद की जा सकती है।
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework

Question

मैं Spring बारे में बहुत कुछ सुनता हूं, लोग पूरे वेब पर कह रहे हैं कि वसंत वेब विकास के लिए एक अच्छा ढांचा है। वसंत फ्रेमवर्क वास्तव में क्या है? मैं अपने वेब-जावा एप्लिकेशन विकास के लिए इसका उपयोग कैसे कर सकता हूं? कोई उदाहरण?







वसंत तीन चीजें हैं।

  1. स्प्रिंग हैंडल निर्भरता इंजेक्शन और मैं आपको मार्टिन फाउलर के निर्भरता इंजेक्शन पर उत्कृष्ट परिचय पढ़ने की सलाह देता हूं।
  2. स्प्रिंग करता है दूसरी बात उत्कृष्ट जावा पुस्तकालयों को आपके अनुप्रयोगों में उपयोग करने के लिए एक बहुत ही सुरुचिपूर्ण तरीके से लपेटती है। एक अच्छे उदाहरण के लिए देखें कि वसंत कार्य निष्पादकों और क्वार्ट्ज शेड्यूलर को कैसे लपेटता है।
  3. तीसरा वसंत आरईएसटी, एक एमवीसी वेब ढांचे और अधिक जैसे वेब सामान के कार्यान्वयन का एक गुच्छा प्रदान करता है। वे समझते हैं कि आप पहले दो के लिए वसंत का उपयोग कर रहे हैं, शायद आप इसे अपने वेब ऐप की ज़रूरतों के लिए उपयोग कर सकते हैं।

समस्या यह है कि स्प्रिंग डी वास्तव में अच्छी तरह से सोचा जाता है, अन्य चीजों के चारों ओर रैपर वास्तव में अच्छी तरह से सोचा जाता है कि अन्य चीजों ने सब कुछ सोचा और वसंत बस अच्छी तरह से इसे लपेटता है। एमवीसी और आरईएसटी के वसंत कार्यान्वयन और अन्य सभी चीजें भी नहीं की जाती हैं (वाईएमएमवी, आईएमएचओ) लेकिन अपवाद हैं (वसंत सुरक्षा दा बम है)। तो मैं वसंत के लिए वसंत का उपयोग करता हूं, और इसके ठंडा रैपर का उपयोग करता हूं लेकिन वेब के लिए अन्य सामान पसंद करता है (मुझे टेपेस्ट्री बहुत पसंद है), आरईएसटी (जर्सी वास्तव में मजबूत है), आदि।




मैं इसके लिए दो भागों को देखता हूं:

  1. "वसंत के लिए वास्तव में क्या है" -> विजेता ह्यूगो द्वारा स्वीकृत उत्तर देखें।
  2. "[...] वसंत [ए] वेब विकास के लिए अच्छा ढांचा है" -> लोग कहते हैं कि यह स्प्रिंग एमवीसी के बारे में बात कर रहा है। स्प्रिंग एमवीसी स्प्रिंग के कई हिस्सों में से एक है, और एक वेब ढांचा है जो स्प्रिंग की सामान्य विशेषताओं का उपयोग करता है, जैसे निर्भरता इंजेक्शन। यह एक बहुत ही सामान्य ढांचा है जिसमें यह बहुत विन्यास योग्य है: आप विभिन्न डीबी परतों (हाइबरनेट, आईबाटिस, सादा जेडीबीसी), विभिन्न दृश्य परतों (जेएसपी, वेग, फ्रीमार्कर ...) का उपयोग कर सकते हैं।

ध्यान दें कि आप स्प्रिंग एमवीसी का उपयोग किये बिना किसी वेब एप्लिकेशन में वसंत का पूरी तरह से उपयोग कर सकते हैं। मैं कहूंगा कि अधिकांश जावा वेब एप्लिकेशन ऐसा करते हैं, जबकि विकेट, स्ट्रूट्स, सीम, जैसे अन्य वेब ढांचे का उपयोग करते समय ...




वसंत शुरुआत में निर्भरता इंजेक्शन था, फिर लगभग सब कुछ के लिए रैपर के राजा जोड़ें (जेपीए कार्यान्वयन आदि पर रैपर)।

लंबी कहानी ... स्प्रिंग प्रीफर एक्सएमएल सॉल्यूशंस (एक्सएमएल स्क्रिप्टिंग इंजन ... ब्र्रर) के अधिकांश हिस्सों, इसलिए डीआई के लिए मैं गुइस का उपयोग करता हूं

अच्छी लाइब्रेरी, लेकिन बढ़ते depnedenciec के साथ, उदाहरण के लिए वसंत जेडीबीसी (शायद असली नाम पैरामीटर के साथ एक जावा जेडीबीसी समाधान) अगले 4-5 मेवेन से ले लो।

वेब विकास के लिए स्प्रिंग एमवीसी ("बड़े वसंत" का हिस्सा) का उपयोग करना ... यह "अनुरोध आधारित" ढांचा है, पवित्र युद्ध "अनुरोध बनाम घटक" है ... आप तक




लाभ निर्भरता इंजेक्शन (डीआई) है । इसका मतलब ऑब्जेक्ट सृजन के कार्य को आउटसोर्स करना है। मुझे एक उदाहरण के साथ समझाएं।

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

अब मेरे कोड में मेरे पास एक वर्ग लंचडेक्साइड निम्नानुसार है:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

उपरोक्त वर्ग में, हमारे मनोदशा के आधार पर, हम बुफे () या चढ़ाया () चुनते हैं। हालांकि इस प्रणाली को कसकर जोड़ दिया गया है। हर बार हमें एक अलग प्रकार की वस्तु की आवश्यकता होती है, हमें कोड को बदलने की जरूरत होती है। इस मामले में, एक लाइन पर टिप्पणी! कल्पना करें कि 50 अलग-अलग लोगों द्वारा 50 अलग-अलग वर्गों का उपयोग किया जाता है। यह एक गड़बड़ का नरक होगा। इस मामले में, हमें सिस्टम को रद्द करने की आवश्यकता है। चलो लंचडेक्साइड कक्षा को फिर से लिखें।

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

ध्यान दें कि नए कीवर्ड का उपयोग करके ऑब्जेक्ट बनाने के बजाय हमने हमारे कन्स्ट्रक्टर के पैरामीटर के रूप में लंच टाइप के ऑब्जेक्ट का संदर्भ पारित किया है। यहां, वस्तु निर्माण आउटसोर्स किया गया है। इस कोड को या तो एक्सएमएल कॉन्फ़िगरेशन फ़ाइल (विरासत) या जावा एनोटेशन (आधुनिक) का उपयोग करके वायर्ड किया जा सकता है। किसी भी तरह से, जिस पर ऑब्जेक्ट का प्रकार बनाया जाएगा, वह रनटाइम के दौरान किया जाएगा। एक्सएमएल द्वारा हमारे कोड में एक ऑब्जेक्ट इंजेक्शन दिया जाएगा - हमारा कोड उस नौकरी के लिए एक्सएमएल पर निर्भर है। इसलिए, निर्भरता इंजेक्शन (डीआई)। डी न केवल हमारी प्रणाली को कम करने में मदद करता है, यह यूनिट परीक्षणों के लेखन को सरल बनाता है क्योंकि यह निर्भरताओं को मजाक करने की अनुमति देता है। अंतिम लेकिन कम से कम नहीं, डी streamlines पहलू ओरिएंटेड प्रोग्रामिंग (एओपी) जो मॉड्यूलरिटी के आगे decoupling और वृद्धि की ओर जाता है। यह भी ध्यान रखें कि उपरोक्त डी कन्स्ट्रक्टर इंजेक्शन है। DI सेटर इंजेक्शन द्वारा भी किया जा सकता है - encapsulation से एक ही सादा पुरानी सेटटर विधि।




अतीत में मैंने पूरी तरह से तकनीकी दृष्टिकोण से वसंत ढांचे के बारे में सोचा था।

टीम के काम और एंटरप्राइज़ वेबपैप्स के विकास के कुछ अनुभवों को देखते हुए - मैं कहूंगा कि वसंत अपने व्यक्तिगत तत्वों (बीन्स) को डीकॉप्लिंग करके अनुप्रयोगों (वेब अनुप्रयोगों) के तेज़ी से विकास के लिए है। तेज़ विकास इसे इतना लोकप्रिय बनाता है। वसंत स्प्रिंग ढांचे पर आवेदन (तारों को ऊपर उठाने) की जिम्मेदारी को स्थानांतरित करने की अनुमति देता है। वसंत ढांचे की निर्भरता इंजेक्शन व्यक्तिगत बीन्स को एक काम करने वाले अनुप्रयोग में जोड़ने / तारों के लिए जिम्मेदार है।

इस तरह डेवलपर्स को अलग-अलग घटकों (सेम) के विकास पर अधिक ध्यान केंद्रित किया जा सकता है जैसे ही बीन्स के बीच इंटरफेस परिभाषित किया जाता है।

इस तरह के आवेदन का परीक्षण आसान है - प्राथमिक ध्यान व्यक्तिगत सेम को दिया जाता है। उन्हें आसानी से decoupled और मजाक किया जा सकता है, तो इकाई परीक्षण तेजी से और कुशल है।

स्प्रिंग फ्रेमवर्क वेब उद्देश्यों को पूरा करने के लिए @ कंट्रोलर ( @Restcontroller ), @Repository , @Component जैसे कई विशेष बीन्स को परिभाषित करता है। मेवेन के साथ एक साथ वसंत एक संरचना प्रदान करता है जो डेवलपर्स के लिए सहज है। टीम का काम आसान और तेज़ है क्योंकि अलग-अलग तत्व अलग-अलग होते हैं और उनका पुन: उपयोग किया जा सकता है।




पुराने दिन, बसंत एक निर्भरता इंजेक्शन फ्रेम काम था ( गुइस , पिकोकॉन्टेनर , ...), लेकिन अब एक दिन यह आपको एंटरप्राइज़ एप्लिकेशन बनाने के लिए कुल समाधान है।

बसंत निर्भरता इंजेक्शन, जो निश्चित रूप से वसंत का दिल है वहां है (और आप यहां अन्य अच्छे उत्तरों की समीक्षा कर सकते हैं), लेकिन वसंत से अधिक हैं ....

वसंत में अब कई परियोजनाएं हैं, जिनमें से प्रत्येक कुछ उप परियोजनाओं ( http://spring.io/projects ) के साथ है। जब कोई वसंत के बारे में बोलता है, तो आपको यह पता लगाना चाहिए कि वह किस वसंत परियोजना के बारे में बात कर रहा है, क्या यह केवल वसंत कोर है, जिसे वसंत ढांचे के रूप में जाना जाता है, या यह एक और वसंत परियोजना है।

कुछ वसंत परियोजनाएं जो बहुत उल्लेखनीय हैं वे हैं:

अगर आपको अपने आवेदन के लिए कुछ और निर्दिष्ट सुविधा की आवश्यकता है, तो आप इसे वहां भी पा सकते हैं:

  • वसंत बैच बैच ढांचे के विकास को सक्षम करने के लिए डिज़ाइन किया गया
    बैच आवेदन
  • वसंत HATEOAS HATEOAS प्रिंसिपल पर आरईएसटी एपीआई बेस का आसान निर्माण
  • मोबाइल एप्लिकेशन विकास के लिए वसंत मोबाइल और वसंत एंड्रॉइड
  • वसंत खोल एक पूर्ण विशेषीकृत खोल (उर्फ कमांड लाइन) अनुप्रयोग का निर्माण
  • बादल अनुप्रयोगों के लिए वसंत बादल और वसंत बादल डेटा प्रवाह

वहां कुछ छोटी परियोजनाएं भी हैं उदाहरण के लिए वसंत-सामाजिक-फेसबुक ( http://projects.spring.io/spring-social-facebook/ )

आप वेब विकास के लिए वसंत का उपयोग कर सकते हैं क्योंकि इसमें Spring MVC मॉड्यूल है जो वसंत ढांचे परियोजना का हिस्सा है। या आप वसंत का उपयोग किसी अन्य वेब फ्रेम कार्य के साथ कर सकते हैं, जैसे struts2




Related