java - वास्तव में स्प्रिंग फ्रेमवर्क क्या है?


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



Answers



मूल रूप से वसंत निर्भरता-इंजेक्शन के लिए एक रूपरेखा है जो कि एक पैटर्न है जो बहुत ही decoupled सिस्टम बनाने की अनुमति देता है।

समस्या

उदाहरण के लिए, मान लीजिए आपको सिस्टम के उपयोगकर्ताओं की सूची की आवश्यकता है और इस प्रकार UserLister नामक एक इंटरफेस की घोषणा करें:

public interface UserLister {
    List<User> getUsers();
}

और संभवत: सभी उपयोगकर्ताओं को प्राप्त करने के लिए डेटाबेस का उपयोग करना एक कार्यान्वयन:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

आपके विचार में आपको एक उदाहरण का उपयोग करना होगा (केवल एक उदाहरण, याद रखना):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

ध्यान दें कि उपर्युक्त कोड ने चर userLister को प्रारंभ नहीं किया है क्या करे? अगर मैं स्पष्ट रूप से इस तरह के ऑब्जेक्ट को इन्स्तांत करता हूं:

UserLister userLister = new UserListerDB();

... मैं अपने वर्ग के कार्यान्वयन के साथ कुछ दृश्य देखता हूं जो डीबी तक पहुंचता है। क्या होगा अगर मैं डीबी कार्यान्वयन से दूसरे को स्विच करना चाहता हूं जो कॉमा से अलग फाइल से उपयोगकर्ता की सूची प्राप्त करता है (याद है, यह एक उदाहरण है)? उस स्थिति में मैं फिर से अपने कोड पर जाकर आखिरी पंक्ति को बदलूंगा:

UserLister userLister = new UserListerCommaSeparatedFile();

इस तरह एक छोटे से कार्यक्रम में कोई समस्या नहीं है ... लेकिन एक कार्यक्रम में क्या होता है जिसमें सैकड़ों दृश्य और एक समान व्यावसायिक वर्ग हैं रखरखाव एक दुःस्वप्न बन जाता है!

वसंत (निर्भरता इंजेक्शन) दृष्टिकोण

एक्सएमएल फाइल का उपयोग करके वर्गों को तार करने के लिए स्प्रिंग क्या करता है, इस प्रकार सभी ऑब्जेक्ट्स को इंस्टीटिव किया जाता है और स्प्रिंग द्वारा आरंभ किया जाता है और सही स्थानों (सर्विसलेट्स, वेब फ्रेमवर्क्स, बिज़नेस क्लासेस, डीएओ, आदि आदि आदि) में इंजेक्ट किया जाता है। ।)।

स्प्रिंग में उदाहरण पर वापस जा रहे हैं हमें userLister फील्ड के लिए एक सेटर की जरूरत है और इस तरह एक्सएमएल की जरूरत है:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

इस तरह जब व्यू बनाया जाता है, तो UserLister के पास काम करने के लिए एक UserLister तैयार होगा।

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

यह बहुत अच्छा है! यही है ना

  • क्या होगा यदि आप अपने UserLister इंटरफ़ेस का एक अन्य कार्यान्वयन का उपयोग करना चाहते हैं? बस एक्सएमएल को बदल दें
  • क्या होगा अगर कोई UserLister कार्यान्वयन तैयार न हो? UserLister एक अस्थायी नकली कार्यान्वयन कार्यक्रम और दृश्य के विकास में आसानी
  • अगर अब मैं स्प्रिंग का उपयोग नहीं करना चाहता हूं? बस इसका इस्तेमाल न करें! आपके आवेदन को युग्मित नहीं किया गया है नियंत्रण के उलटाव कहते हैं: "आवेदन ढांचे को नियंत्रित करता है, न कि फ्रेमवर्क को नियंत्रण करता है"।

वहाँ के आस-पास निर्भरता इंजेक्शन के लिए कुछ अन्य विकल्प हैं, मेरी राय में स्प्रिंग काफी सरलता के साथ अपनी सादगी, सुंदरता और स्थिरता के कारण बना है कि स्प्रिंग्ससोर्स के लोग ने कई कई पीओजेओ प्रोग्राम किए हैं जो स्प्रिंग को कई अन्य सामान्य ढांचे के बिना एकीकृत किए बिना मदद करते हैं आपके आवेदन में घुसपैठ इसके अलावा स्प्रिंग में वसंत एमवीसी, स्प्रिंग वेबफ्लो, स्प्रिंग सिक्योरिटी जैसे कई अच्छा सबप्रूक्ट हैं और फिर आदि की एक छोटी सूची भी है।

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




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

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;
}

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

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

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

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

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

निम्न URL मदद की भी हो सकते हैं
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




क्या वसंत है? मैं शीघ्र ही इस प्रश्न का उत्तर दूंगा, लेकिन सबसे पहले, हम विजेता ह्यूगो द्वारा इस उदाहरण पर एक और नज़र डालें। यह एक महान उदाहरण नहीं है क्योंकि यह एक नए रूपरेखा की आवश्यकता को सही नहीं करता है।

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

किया हुआ! तो अब भी यदि आपके पास सैकड़ों या हजारों विचार हैं, तो आपको अभी भी बस एक ही लाइन कोड को बदलना होगा, जैसा कि स्प्रिंग एक्सएमएल दृष्टिकोण में है लेकिन कोड की एक पंक्ति को बदलना अभी भी पुनः कंपाइलिंग की आवश्यकता है क्योंकि आप संपादन XML का विरोध करते हैं? अच्छी तरह से मेरे उधम मचाते दोस्त, चींटी और स्क्रिप्ट दूर का उपयोग करें!

तो क्या वसंत है? इसके लिए है:

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

आगे पढ़ें: http://discuss.joelonsoftware.com/?joel.3.219431.12




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

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

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

कुछ स्प्रिंग प्रोजेक्ट्स जो उल्लेख के लायक हैं:

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

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

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

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




संक्षेप में संक्षेप में, मैं कहूंगा कि स्प्रिंग आपके आवेदन में "गोंद" है इसका इस्तेमाल विभिन्न ढांचे और अपने कोड को एकीकृत करने के लिए किया जाता है




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

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

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




क्या आप वसंत के साथ एक वेब अनुप्रयोग में शायद चाहते हैं -

  • स्प्रिंग एमवीसी, जो 2.5+ से आपको नियंत्रक वर्ग के रूप में POJOs का उपयोग करने की अनुमति देता है, जिसका अर्थ है कि आपको किसी विशेष ढांचा (स्ट्रट्स या स्प्रिंग प्री -5 में) से विस्तार करने की आवश्यकता नहीं है। निर्भरता इंजेक्शन में भाग लेने के लिए नियंत्रक वर्गों को भी धन्यवाद देना आसान है
  • हाइबरनेट के साथ वसंत का एकीकरण, जो कि ओआरएम समाधान के साथ काम सरल बनाने का एक अच्छा काम करता है (ज्यादातर मामलों में)
  • किसी वेब ऐप के लिए स्प्रिंग का प्रयोग करने से आप अपने डोमेन ऑब्जेक्ट्स को ऐप्लिकेशन के सभी स्तरों पर उपयोग कर सकते हैं - एक ही कक्षाएं जो हाइबरनेट का इस्तेमाल करते हुए मैप की जाती हैं, वे वर्ग हैं जिन्हें आप "फार्म बीन्स" के रूप में उपयोग करते हैं। प्रकृति से, इससे एक अधिक मजबूत डोमेन मॉडल का कारण बन जाएगा, क्योंकि यह कक्षाओं की संख्या में कटौती करेगा
  • स्प्रिंग फ़ॉर्म टैग बिना परेशानी के बिना फॉर्म बनाने में आसान बनाता है

इसके अतिरिक्त, स्प्रिंग विशाल है - इसलिए ऐसी बहुत सारी चीज़ें हैं जो आपको वेब एप जैसे स्प्रिंग एओपी या स्प्रिंग सिक्योरिटी में उपयोग करने में दिलचस्पी ले सकती हैं। लेकिन ऊपर सूचीबद्ध चार चीजें स्प्रिंग के सामान्य घटकों का वर्णन करती हैं जो वेब ऐप में उपयोग की जाती हैं।




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

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

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




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

आपके डेटा एक्सेस ऑब्जेक्ट को हमेशा हाइबरनेट एक्सेस की आवश्यकता होगी, स्प्रिंग वायर हाइबरनेट क्लास आपके लिए आपके डीएओ में।

इसके अतिरिक्त, वसंत मूल रूप से आपको पुस्तकालयों के एक समूह के ठोस कॉन्फ़िगरेशन देता है, और उसमें, आपको कौन सी लीबिक्स का उपयोग करना चाहिए में मार्गदर्शन देता है

वसंत वास्तव में एक महान उपकरण है (मैं स्प्रिंग एमवीसी के बारे में बात नहीं कर रहा था, बस आधार ढांचा)




स्प्रिंग Enterprise JavaBeans (EJB) प्रौद्योगिकी के लिए एक अच्छा विकल्प है इसमें वेब फ्रेमवर्क और वेब सर्विसेज़ फ्रेमवर्क घटक भी हैं।




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

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
        }
    }

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




स्प्रिंग कॉन्फ़िगरेशन के लिए विभिन्न एनोटेशन के लिए समर्थन पेश करने के बाद स्वीकृत उत्तर में एनोटेशन उपयोग शामिल नहीं है।

वसंत (निर्भरता इंजेक्शन) दृष्टिकोण

एक XML फ़ाइल का उपयोग करने के साथ-साथ कक्षाएं तार करने का दूसरा तरीका: एनोटेशन। चलो स्वीकृत उत्तर से उदाहरण का प्रयोग करते हैं और बीन से सीधे बीन में केवल एनोटेशन का प्रयोग करते हुए बीन को पंजीकृत करते हैं:

@Bean
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

इस तरह जब व्यू बनाया जाता है, तो जादूगर के पास काम करने के लिए एक यूज़रलिस्टर तैयार होगा।

उपर्युक्त बयान किसी भी एक्सएमएल फ़ाइल उपयोग और एक अन्य एनोटेशन @Autowired साथ तारों की कोई ज़रूरत नहीं है जो एक प्रासंगिक कार्यान्वयन पाता है और इसे इंजेक्षन के साथ थोड़ा बोनस के साथ मान्य है।

@Autowired
private UserLister userLister;



वसंत एक काफी आसान निर्भरता इंजेक्शन प्रणाली के रूप में शुरू हुआ। अब यह बहुत बड़ा है और इसमें सब कुछ है (लौकिक रसोई सिंक को छोड़कर)

लेकिन डर नहीं, यह काफी मॉड्यूलर है, ताकि आप केवल उन टुकड़ों का उपयोग कर सकें जो आप चाहते हैं।

यह देखने के लिए कि यह सब कैसे शुरू हुआ:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

यह बूढ़ा हो सकता है लेकिन यह एक उत्कृष्ट पुस्तक है

स्प्रिंग को विशेष रूप से समर्पित इस बार एक और अच्छी किताब के लिए:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

यह स्प्रिंग के पुराने संस्करणों को भी संदर्भित करता है लेकिन निश्चित रूप से देख रहा है।




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

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

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

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