या लेखात, मी तुम्हाला माझा कोड वापरून 5 मिनिटांत कार्यरत स्प्रिंग प्रकल्प कसा चालू करायचा हे सांगणार नाही. मी फक्त मूलभूत गोष्टी लिहिणार आहे — ज्या गोष्टींबद्दल तुम्ही अनभिज्ञ असाल आणि तरीही प्रकल्प तयार करू शकता. परंतु या लेखात, काय होत आहे आणि सर्वात महत्त्वाचे म्हणजे, का हे तुम्हाला अजूनही समजणार नाही.
जसे आपण पाहू शकता, वसंत ऋतु मॉड्यूलर आहे. हे आम्हाला आमच्या ऍप्लिकेशनसाठी आवश्यक असलेले मॉड्यूल कनेक्ट करू देते आणि आम्ही स्पष्टपणे वापरणार नाही ते कनेक्ट करू शकत नाही. माझ्या माहितीनुसार, स्प्रिंगला त्याच्या तत्कालीन प्रतिस्पर्ध्याला (EJB) मागे टाकून आघाडी घेण्याचा हा दृष्टिकोन होता. EJB वापरून अनुप्रयोगांनी त्यांच्या मागे बरेच अवलंबित्व ओढले आणि परिणामी, ते आळशी आणि मंद झाले. प्रतिमा दर्शविते की स्प्रिंग फ्रेमवर्कमध्ये अनेक मॉड्यूल आहेत:
स्प्रिंग फ्रेमवर्क काय आहे?
स्प्रिंग फ्रेमवर्क, किंवा फक्त स्प्रिंग, जावामध्ये वेब अनुप्रयोग तयार करण्यासाठी सर्वात लोकप्रिय फ्रेमवर्क आहे. फ्रेमवर्क हे लायब्ररीसारखे असते (कदाचित आपण या शब्दाशी अधिक परिचित असाल), परंतु विचार करण्यासारखे काहीतरी आहे. ढोबळपणे सांगायचे तर, जेव्हा तुम्ही लायब्ररी वापरता, तेव्हा तुम्ही त्यात समाविष्ट असलेल्या वर्गांची उदाहरणे तयार करता, तुम्हाला आवश्यक असलेल्या पद्धतींना कॉल करता आणि अशा प्रकारे तुम्हाला आवश्यक असलेला निकाल मिळतो. दुसऱ्या शब्दांत, हा अधिक अत्यावश्यक दृष्टीकोन आहे: तुमच्या प्रोग्राममध्ये, तुम्हाला कोणता ऑब्जेक्ट तयार करायचा आहे, कोणत्या विशिष्ट पद्धतीला कधी कॉल करायचा आहे, इ. फ्रेमवर्कसह, गोष्टी थोड्या वेगळ्या असतात. तुम्ही फक्त तुमचे स्वतःचे काही वर्ग लिहा आणि त्यात काही लॉजिक लिहा, पण मग फ्रेमवर्क स्वतः तुमच्या वर्गांची उदाहरणे तयार करते आणि त्यांच्या पद्धती कॉल करते. तुमचे वर्ग सामान्यत: फ्रेमवर्कमधून काही इंटरफेस लागू करतात किंवा त्यातील काही वर्ग वारसा घेतात, अशा प्रकारे तुम्हाला काही कार्यक्षमता प्रदान करतात जी तुमच्यासाठी आधीच लिहिली गेली आहेत. पण हे नेहमीच होत नाही. उदाहरणार्थ, स्प्रिंग असे घट्ट कपलिंग टाळण्याचा शक्य तितका प्रयत्न करतो (जेथे तुमचे वर्ग थेट फ्रेमवर्कमधील वर्ग/इंटरफेसवर अवलंबून असतात). हे साध्य करण्यासाठी ते भाष्ये वापरते. आम्ही नंतर याकडे परत येऊ. परंतु हे समजून घेणे महत्त्वाचे आहे की स्प्रिंग हा फक्त वर्ग आणि इंटरफेसचा संग्रह आहे जो तुमच्यासाठी वापरण्यासाठी उपलब्ध आहे :) मला हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. जे आपल्या सर्वांना परिचित आहेत. आणि आज आम्ही त्यापैकी एक लिहू. अशा प्रकारे तुम्हाला काही कार्यक्षमता प्रदान करते जी तुमच्यासाठी आधीच लिहिली गेली आहे. पण हे नेहमीच होत नाही. उदाहरणार्थ, स्प्रिंग असे घट्ट कपलिंग टाळण्याचा शक्य तितका प्रयत्न करतो (जेथे तुमचे वर्ग थेट फ्रेमवर्कमधील वर्ग/इंटरफेसवर अवलंबून असतात). हे साध्य करण्यासाठी ते भाष्ये वापरते. आम्ही नंतर याकडे परत येऊ. परंतु हे समजून घेणे महत्त्वाचे आहे की स्प्रिंग हा फक्त वर्ग आणि इंटरफेसचा संग्रह आहे जो तुमच्यासाठी वापरण्यासाठी उपलब्ध आहे :) मला हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. जे आपल्या सर्वांना परिचित आहेत. आणि आज आम्ही त्यापैकी एक लिहू. अशा प्रकारे तुम्हाला काही कार्यक्षमता प्रदान करते जी तुमच्यासाठी आधीच लिहिली गेली आहे. पण हे नेहमीच होत नाही. उदाहरणार्थ, स्प्रिंग असे घट्ट कपलिंग टाळण्याचा शक्य तितका प्रयत्न करतो (जेथे तुमचे वर्ग थेट फ्रेमवर्कमधील वर्ग/इंटरफेसवर अवलंबून असतात). हे साध्य करण्यासाठी ते भाष्ये वापरते. आम्ही याकडे नंतर परत येऊ. परंतु हे समजून घेणे महत्त्वाचे आहे की स्प्रिंग हा फक्त वर्ग आणि इंटरफेसचा संग्रह आहे जो तुमच्यासाठी वापरण्यासाठी उपलब्ध आहे :) मला हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. जे आपल्या सर्वांना परिचित आहेत. आणि आज आम्ही त्यापैकी एक लिहू. स्प्रिंग अशा घट्ट कपलिंग टाळण्याचा शक्य तितका प्रयत्न करतो (जेथे तुमचे वर्ग थेट फ्रेमवर्कमधील वर्ग/इंटरफेसवर अवलंबून असतात). हे साध्य करण्यासाठी ते भाष्ये वापरते. आम्ही नंतर याकडे परत येऊ. परंतु हे समजून घेणे महत्त्वाचे आहे की स्प्रिंग हा फक्त वर्ग आणि इंटरफेसचा संग्रह आहे जो तुमच्यासाठी वापरण्यासाठी उपलब्ध आहे :) मला हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. जे आपल्या सर्वांना परिचित आहेत. आणि आज आम्ही त्यापैकी एक लिहू. स्प्रिंग अशा घट्ट कपलिंग टाळण्याचा शक्य तितका प्रयत्न करतो (जेथे तुमचे वर्ग थेट फ्रेमवर्कमधील वर्ग/इंटरफेसवर अवलंबून असतात). हे साध्य करण्यासाठी ते भाष्ये वापरते. आम्ही याकडे नंतर परत येऊ. परंतु हे समजून घेणे महत्त्वाचे आहे की स्प्रिंग हा फक्त वर्ग आणि इंटरफेसचा संग्रह आहे जो तुमच्यासाठी वापरण्यासाठी उपलब्ध आहे :) मला हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. जे आपल्या सर्वांना परिचित आहेत. आणि आज आम्ही त्यापैकी एक लिहू. ) मला लगेच हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर आपल्या सर्वांना परिचित असलेल्या सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. आणि आज आम्ही त्यापैकी एक लिहू. ) मला लगेच हे देखील लक्षात घ्यायचे आहे की स्प्रिंग केवळ वेब ऍप्लिकेशन्ससाठीच नाही तर आपल्या सर्वांना परिचित असलेल्या सर्वात सामान्य कन्सोल प्रोग्रामसाठी देखील वापरले जाऊ शकते. आणि आज आम्ही त्यापैकी एक लिहू.रचना
पण स्प्रिंग फक्त एक विशिष्ट फ्रेमवर्क नाही. त्याऐवजी, हे एक सामान्य नाव आहे जे अनेक लहान फ्रेमवर्कचा संदर्भ देण्यासाठी वापरले जाते, ज्यापैकी प्रत्येक स्वतःचे कार्य करते.https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
आकृती 2.1. स्प्रिंग फ्रेमवर्कचे विहंगावलोकन
- डेटा ऍक्सेस
- वेब
- कोर
- आणि अधिक
Java मध्ये स्प्रिंग फ्रेमवर्क का आहे?
बरं, ते फॅशनेबल, चपळ आणि ताजे आहे या वस्तुस्थितीशिवाय, मी आत्ताच म्हणू शकतो की स्प्रिंग वापरून तुम्हाला थोडेसे कौशल्य प्राप्त होताच, तुमच्याकडे यापुढे नसलेले सर्व प्रकारचे काम कसे आहे हे तुम्हाला समजेल. करण्यासाठी, आणि वसंत ऋतु स्वतःवर किती काम घेते. तुम्ही कॉन्फिगरेशन सेटिंग्जच्या दोन डझन ओळी लिहू शकता आणि काही वर्ग लिहू शकता आणि तुमचा एक कार्यरत प्रकल्प असेल. पण ज्या क्षणी तुम्ही विचार करू लागता की किती सामग्री खाली आहे, किती काम केले जात आहे आणि तुम्हाला किती कोड लिहावे लागतील जर तुम्ही प्लेन सर्व्हलेट्स किंवा सॉकेट्स आणि शुद्ध जावावर आधारित समान प्रकल्प राबवणार असाल, तुमचे केस शेवटपर्यंत उभे राहतील :) वसंत ऋतुचे वर्णन एक प्रकारची जादू म्हणून देखील केले जाते. जेव्हा तुम्ही पाहता की सर्वकाही कार्य करते तेव्हा तुम्हाला याचा अनुभव येतो, पण पडद्यामागे कसे आणि किती काम चालले आहे याचीही तुम्हाला ढोबळ कल्पना आहे — त्यामुळे कृतीत खरोखरच काही प्रकारची जादू आहे असे दिसते :) हे सर्व एकमेकांशी कसे जोडलेले आहे हे सांगण्याचा प्रयत्न करण्यापेक्षा याला जादू म्हणणे सोपे आहे. :) स्प्रिंगचा अभ्यास करण्याच्या बाजूने दुसरा युक्तिवाद असा आहे की कनिष्ठ विकासकांसाठी (माझ्या वैयक्तिक निरीक्षणांवर आधारित) अंदाजे 90% नोकऱ्यांसाठी स्प्रिंग काय आहे याचे ज्ञान किंवा किमान सामान्य कल्पना आवश्यक आहे.Data
, Web MVC
, आणि Security
मॉड्यूल्स अत्याधुनिक विकसक देतात :) परंतु आज फक्त मूलभूत गोष्टींबद्दल आहे.
DI/IoC
जर तुम्ही कधी स्प्रिंगबद्दल वाचण्याचा प्रयत्न केला असेल, तर तुम्हाला पहिली गोष्ट आली असेल ती कदाचित हे संक्षिप्त शब्द: DI/IoC. आता मी अत्यंत शिफारस करतो की तुम्ही या लेखातून विश्रांती घ्या आणि हा DZone लेख वाचा ! IoC म्हणजे इन्व्हर्शन ऑफ कंट्रोल. लायब्ररीचा वापर करताना कोणत्या ऑब्जेक्टवर कॉल करायचा हे तुम्ही स्वतः कोडमध्ये सूचित केले आहे, परंतु फ्रेमवर्क वापरणे म्हणजे फ्रेमवर्क तुमच्या कोडला योग्य वेळी कॉल करेल असा अर्थ असा आहे, असे मी आधीच नमूद केले आहे. दुसऱ्या शब्दांत, या नंतरच्या प्रकरणात, तुम्ही यापुढे कोड/प्रोग्राम कार्यान्वित करण्याची प्रक्रिया व्यवस्थापित करत नाही — फ्रेमवर्क तुमच्यासाठी हे करते. तुम्ही फ्रेमवर्कवर नियंत्रण पास केले आहे (नियंत्रणाचा उलटा). डीआय म्हणजे अवलंबन इंजेक्शन. अवलंबित्व इंजेक्शनसह, आपण मुख्य पद्धतीमध्ये मांजरीच्या वस्तू तयार करत नाही आणि नंतर त्या आपल्या पद्धतींमध्ये पाठवू शकता. त्याऐवजी, स्प्रिंग फ्रेमवर्क ते तुमच्यासाठी तयार करते. तुम्ही फक्त "मला इथे एक मांजर मिळवायचे आहे" असे काहीतरी म्हणता आणि फ्रेमवर्क तुमच्या पद्धतीने तुमच्यापर्यंत पोहोचते. हे संक्षेप आपण भविष्यातील लेखांमध्ये पाहू.बीन्स आणि संदर्भ
स्प्रिंगमधील मुख्य संकल्पनांपैकी एक म्हणजे बीन. खरं तर, ही फक्त काही वर्गाची वस्तू आहे. समजा आपल्याकडे एक प्रोग्राम आहे ज्यासाठी 3 वस्तू आवश्यक आहेत: एक मांजर, एक कुत्रा आणि एक पोपट. आणि आमच्याकडे अनेक पद्धती असलेले वर्ग आहेत. कधीकधी आपल्याला एका पद्धतीसाठी मांजरीची आवश्यकता असते, कधीकधी आपल्याला वेगळ्या पद्धतीसाठी कुत्रा आवश्यक असतो, आणि कधीकधी आपल्या पद्धतींमध्ये मांजर आणि पोपट दोन्ही आवश्यक असतात (उदाहरणार्थ, मांजरीला खायला देण्याची पद्धत, हा-हा). इतर पद्धतींसाठी, सर्व तीन वस्तू आवश्यक आहेत. होय, आपण प्रथम या तीन वस्तू मुख्य पद्धतीमध्ये तयार करू शकतो, आणि नंतर त्या आमच्या वर्गात पाठवू शकतो, आणि नंतर या वर्गांमध्ये त्या संबंधित पद्धतींमध्ये पास करू शकतो... आणि असेच संपूर्ण कार्यक्रमात. परंतु जर आम्ही असे समजू की आम्हाला आमच्या पद्धतींसाठी इनपुट पॅरामीटर्सची सूची अधूनमधून बदलायची आहे (उदाहरणार्थ, आम्ही काहीतरी पुन्हा लिहिण्याचा किंवा नवीन कार्यक्षमता जोडण्याचे ठरवतो), नंतर आम्हाला कोडमध्ये काही बदल करावे लागतील. आणि आता कल्पना करा की आपल्याकडे 3 नाही तर 300 अशा वस्तू आहेत. एक पर्याय म्हणजे आमच्या सर्व वस्तू एका यादीत एकत्र करणे (List<Object>
), ते प्रत्येक पद्धतीमध्ये पास करा आणि नंतर पद्धतींमध्ये असताना आवश्यक ऑब्जेक्ट मिळवा. पण प्रोग्रॅम चालू असताना, या यादीत एखादी वस्तू जोडली गेली किंवा वाईट म्हणजे एखादी वस्तू हटवली तर काय? यामध्ये प्रत्येक पद्धत खंडित करण्याची क्षमता आहे जिथे आपण सूचीमधून वस्तू मिळविण्यासाठी निर्देशांक वापरतो. ही समस्या टाळण्यासाठी, आम्ही आमच्या वस्तू सूचीमध्ये नाही तर नकाशामध्ये संग्रहित करण्याचा निर्णय घेतो, जिथे की हे ऑब्जेक्टचे नाव असते आणि मूल्य हे ऑब्जेक्टच असते. हे आम्हाला फक्त त्यांच्या नावाचा वापर करून आम्हाला आवश्यक असलेल्या वस्तू पुनर्प्राप्त करण्यास अनुमती देते, उदाहरणार्थ get("parrot"), आणि प्रतिसादात आम्हाला पोपट वस्तू मिळते. किंवा की ऑब्जेक्टचा वर्ग असू शकतो आणि मूल्य हे ऑब्जेक्टच असू शकते. या प्रकरणात, ऑब्जेक्टचे नाव निर्दिष्ट करण्याऐवजी, परंतु आपल्याला आवश्यक असलेल्या ऑब्जेक्टचा वर्ग निर्दिष्ट करू शकतो. तेही सोयीचे आहे. किंवा आम्ही नकाशासाठी काही प्रकारचे रॅपर देखील लिहू शकतो, जिथे काही पद्धतींना त्यांच्या नावाने वस्तू मिळतात आणि इतर पद्धतींना त्यांच्या वर्गानुसार वस्तू मिळतात. आपण इथे जे पोहोचलो त्याला an म्हणतातस्प्रिंग फ्रेमवर्कमध्ये अनुप्रयोग संदर्भ . संदर्भ म्हणजे बीन्स (वस्तूंचा) संग्रह. आम्हाला आवश्यक बीन (वस्तू) मिळवण्यासाठी आम्ही त्याच्या नावाने, त्याच्या प्रकारानुसार किंवा इतर कोणत्याही मार्गाने संदर्भ मिळवतो. याव्यतिरिक्त, आम्ही स्प्रिंगला स्वतःच्या संदर्भात आवश्यक असलेल्या बीनसाठी जाण्यास सांगू शकतो आणि ते आमच्या पद्धतीमध्ये पाठवू शकतो. उदाहरणार्थ, समजा आपल्याकडे अशी पद्धत आहे:
public void doSomething(Cat cat) {
...
}
जेव्हा स्प्रिंगने ही पद्धत म्हटली, तेव्हा त्याने आमची मांजर वस्तू त्याच्या संदर्भातून घेतली आणि ती पद्धत पास केली. परंतु आता आम्ही ठरवले आहे की, मांजरी व्यतिरिक्त, आमच्या पद्धतीला पोपट देखील आवश्यक आहे. वसंत ऋतु सह, काहीही सोपे असू शकत नाही! आम्ही फक्त लिहितो:
public void doSomething(Cat cat, Parrot parrot) {
...
}
आता जेव्हा स्प्रिंग आमच्या पद्धतीला कॉल करते, तेव्हा त्याला मांजर आणि पोपट पास करण्याची गरज समजते, म्हणून तो त्याच्या संदर्भाकडे जातो, या दोन वस्तू मिळवतो आणि आमच्या पद्धतीकडे जातो. नियंत्रणाचा लगाम स्प्रिंगमध्ये हस्तांतरित करून, आम्ही ऑब्जेक्ट्स तयार करण्याची आणि त्यांना आमच्या पद्धतींमध्ये हस्तांतरित करण्याची जबाबदारी देखील हस्तांतरित करतो, ज्याला स्प्रिंग म्हणतात. हे प्रश्न निर्माण करते: वसंत ऋतुला कोणत्या वस्तू (बीन्स) तयार करायच्या हे कसे कळते?
अनुप्रयोग कॉन्फिगर करण्याचे मार्ग
अॅप्लिकेशन कॉन्फिगर करण्याचे तीन मुख्य मार्ग आहेत , म्हणजे स्प्रिंगला नेमके कोणत्या वस्तूंची गरज आहे हे सांगण्याचे मार्ग:- XML कॉन्फिगरेशन फाइल्स
- Java-आधारित कॉन्फिगरेशन
- स्वयंचलित कॉन्फिगरेशन
- सर्वोच्च प्राधान्य असलेली पद्धत, ज्याला प्राधान्य दिले पाहिजे, ते स्वयंचलित कॉन्फिगरेशन आहे
- सर्व संभाव्य बीन्स योग्यरित्या कॉन्फिगर करण्यासाठी स्वयंचलित कॉन्फिगरेशनचा वापर केला जाऊ शकत नसल्यास, Java-आधारित कॉन्फिगरेशन वापरा (ज्यामध्ये Java कोड वापरून ऑब्जेक्ट्स तयार करणे समाविष्ट आहे)
- आणि सर्वात कमी-प्राधान्य पद्धत ही जुन्या पद्धतीची आहे — XML कॉन्फिगरेशन फाइल्स वापरणे.
GO TO FULL VERSION