एक सेम है के लिए विधि के नाम है कि जावा बीन दिशा निर्देशों का पालन (भी बुलाया डिजाइन पैटर्न) के साथ एक जावा वर्ग गुण , तरीकों , और घटनाओं। इस प्रकार, बीन वर्ग का कोई भी सार्वजनिक तरीका जो संपत्ति की परिभाषा का हिस्सा नहीं है, एक सेम विधि है। न्यूनतम रूप से, एक जावा वर्ग, यहां तक कि एकमात्र सदस्य के रूप में एक संपत्ति के साथ (निश्चित रूप से, सार्वजनिक गेट्टर और सेटर की आवश्यकता के साथ), एकमात्र सदस्य के रूप में एक सार्वजनिक विधि या सिर्फ एक सार्वजनिक ईवेंट श्रोता पंजीकरण विधि एक जावा बीन है। इसके अलावा, संपत्ति या तो केवल पढ़ी जाने वाली संपत्ति हो सकती है (जिसमें एक गेटर विधि है लेकिन कोई सेटर नहीं है) या केवल-लेखन संपत्ति (केवल एक सेटर विधि है)। जावा बीन को किसी भी बीनबॉक्स टूल या कंटेनर में दिखाई देने के लिए एक सार्वजनिक वर्ग होना चाहिए। कंटेनर को इसे तुरंत करने में सक्षम होना चाहिए; इस प्रकार, इसका सार्वजनिक निर्माणकर्ता भी होना चाहिए। JavaBeans विनिर्देशएक कंटेनर के लिए एक सार्वजनिक शून्य-आर्गों के निर्माता, स्पष्ट या डिफ़ॉल्ट होने के लिए बीन की आवश्यकता नहीं होती है, ताकि इसे तुरंत किया जा सके। यदि आप एक फ़ाइल प्रदान कर सकते हैं (एक्सटेंशन के साथ .ser) जिसमें एक क्रमबद्ध उदाहरण है, तो एक बीनबॉक्स टूल एक प्रोटोटाइप बीन को तुरंत हटाने के लिए उस फ़ाइल का उपयोग कर सकता है। अन्यथा, बीन के पास एक सार्वजनिक शून्य-आर्ग कंस्ट्रक्टर होना चाहिए, या तो स्पष्ट या डिफ़ॉल्ट।
एक बार जब बीन तुरंत तैयार हो जाता है, तो जावा बीन एपीआई (java.beans। *) इसे आत्मसात कर सकता है और इसके लिए तरीकों को बुला सकता है। यदि कोई वर्ग इंटरफ़ेस को लागू नहीं कर रहा है, तो बीनइन्फो या बीनइन्फो कार्यान्वयन को लागू करना, सिंपल बीनइन्फो क्लास उपलब्ध है, आत्मनिरीक्षण में लक्ष्य बीन द्वारा समर्थित विधियों का अध्ययन करने के लिए प्रतिबिंब (अंतर्निहित आत्मनिरीक्षण) का उपयोग करना शामिल है और फिर सरल डिजाइन पैटर्न (दिशानिर्देश) से कटौती करना है। वे विधियाँ जो गुण, घटनाएँ और सार्वजनिक पद्धतियाँ समर्थित हैं। यदि इंटरफ़ेस बीनइन्फो को लागू करने वाला एक वर्ग (बीन फू के लिए, इसे FooBeanInfo नाम दिया जाना चाहिए) उपलब्ध है, एपीआई अंतर्निहित आत्मनिरीक्षण को दरकिनार कर देता है और इस तरीके (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors () का उपयोग करता है। जानकारी। यदि SimpleBeanInfo का विस्तार करने वाला वर्ग उपलब्ध है, साधारण बीनइन्फो के आधार पर सार्वजनिक तरीके (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors ()) ओवरराइड हो गए हैं, यह जानकारी प्राप्त करने के लिए उन उपयोग किए गए तरीकों (ओं) का उपयोग करेगा; ऐसी विधि के लिए जिसे ओवरराइड नहीं किया जाता है, यह संबंधित अंतर्निहित आत्मनिरीक्षण के लिए डिफ़ॉल्ट होगा। एक सेम वैसे भी तत्काल प्रभाव की जरूरत है, भले ही उस पर कोई अंतर्निहित आत्मनिरीक्षण न किया गया हो। इस प्रकार, एक सार्वजनिक ज़री-आर्ग कंस्ट्रक्टर की आवश्यकता। लेकिन, निश्चित रूप से, इसे पहचानने के लिए सीरियल योग्य या बाहरी इंटरफ़ेस आवश्यक नहीं है। हालाँकि, जावा बीन विनिर्देशन कहता है, 'हम यह भी चाहेंगे कि यह एक छोटे से बीन के सामान्य मामले के लिए "तुच्छ" हो जो बस अपनी आंतरिक स्थिति को बचाना चाहता है और इसके बारे में सोचना नहीं चाहता है। " इसलिए, सभी बीन्स को सीरियलाइज़ करने योग्य या एक्सरसाइज़ करने वाला इंटरफ़ेस लागू करना होगा। कुल मिलाकर, JavaBeans विनिर्देश बीन के गठन के बारे में कठिन और तेज़ नहीं है। "JavaBeans घटकों को लिखना आश्चर्यजनक रूप से आसान है। आपको किसी विशेष टूल की आवश्यकता नहीं है और आपको किसी भी इंटरफ़ेस को लागू करने की आवश्यकता नहीं है। सेम लिखना केवल कुछ कोडिंग सम्मेलनों का पालन करने की बात है। आपको बस इतना करना है कि आप अपने वर्ग को पसंद करें। एक बीन - बीन का उपयोग करने वाले उपकरण आपके बीन को पहचानने और उसका उपयोग करने में सक्षम होंगे। " सामान्य रूप से, निम्न वर्ग भी जावा बीन है,
public class Trivial implements java.io.Serializable {}
कहो, एक बीन कंस्ट्रक्टर के कुछ पैरामीटर हैं। मान लीजिए कि कुछ सरल प्रकार हैं। कंटेनर को पता नहीं हो सकता है कि उन्हें क्या मान देना है; यहां तक कि अगर यह करता है, तो परिणामी उदाहरण पुन: प्रयोज्य नहीं हो सकता है। यह तभी समझ में आता है जब उपयोगकर्ता एनोटेशन या xml कॉन्फ़िगरेशन फ़ाइलों को स्प्रिंग बीन्स के रूप में कहकर (मानों को निर्दिष्ट) कॉन्फ़िगर कर सकता है। और मान लें कि कुछ पैरामीटर क्लास या इंटरफ़ेस प्रकार हैं। फिर, कंटेनर को पता नहीं हो सकता है कि उसे क्या मान देना है। यह तभी समझ में आ सकता है जब उपयोगकर्ता एनोटेशन या xml कॉन्फ़िगरेशन फ़ाइलों के द्वारा विशिष्ट वस्तुओं को निर्दिष्ट कर सकता है। हालाँकि, यहां तक कि वसंत में (xml कॉन्फ़िगरेशन फ़ाइलों के माध्यम से), विशिष्ट ऑब्जेक्ट्स (स्ट्रिंग नामों के साथ) को कंस्ट्रक्टर तर्कों (कंस्ट्रक्टर तर्कों की विशेषता या तत्व) के लिए असाइन करना प्रकार नहीं है, यह मूल रूप से संसाधन इंजेक्शन की तरह है। अन्य स्प्रिंग बीन्स (जिसे सहयोगी कहा जाता है, एक कंस्ट्रक्टर लॉजिक तत्व में तत्व के माध्यम से) का संदर्भ बनाना मूल रूप से निर्भरता इंजेक्शन है और इस प्रकार यह असुरक्षित है। जाहिर है, एक निर्भरता (सहयोगी बीन) में इंजेक्टर मापदंडों के साथ एक निर्माता हो सकता है; इंजेक्ट की गई निर्भरता (ies) में एक पैरामीटर हो सकता है जिसमें पैरामीटर वगैरह हों। इस परिदृश्य में, अंत में, आपको कुछ बीन क्लासेस (जैसे, MyBean.class) की आवश्यकता होगी कि कंटेनर नए MyBean () को कॉल करने से पहले ही तुरंत काम कर सकता है, इससे पहले कि वह कंस्ट्रक्टरों पर निर्भरता इंजेक्शन के माध्यम से अन्य सहयोगी बीन्स का निर्माण कर सके- इस प्रकार, आवश्यकता के लिए सेम के पास सार्वजनिक शून्य-आर्ग कंस्ट्रक्टर है। मान लीजिए, यदि कोई कंटेनर निर्भरता इंजेक्शन का समर्थन नहीं करता है और / या वसंत में के रूप में कुछ एनोटेशन या xml कॉन्फ़िगर फ़ाइलों के माध्यम से निर्माणकर्ता को सरल-प्रकार के मान निर्दिष्ट करने की अनुमति नहीं देता है; बीन बिल्डरों के पास पैरामीटर नहीं होना चाहिए। यहां तक कि एक स्प्रिंग बीन्स एप्लिकेशन को सार्वजनिक सेम-आर्ग कंस्ट्रक्टर (उदाहरण के लिए, जहां आपके स्प्रिंग एप्लिकेशन में कंस्ट्रक्टर तर्कों के रूप में सरल प्रकार के साथ कोई बीन नहीं है) के लिए कुछ बीन्स की आवश्यकता होगी।
जेएसएफ प्रबंधित बीन्स एक वेब कंटेनर में चलते हैं। उन्हें @ManagedBean एनोटेशन या अनुप्रयोग कॉन्फ़िगरेशन संसाधन फ़ाइल प्रबंधित-bean.xml के साथ कॉन्फ़िगर किया जा सकता है। हालांकि, यह केवल संसाधन इंजेक्शन (टाइपसेफ़ नहीं) के माध्यम से इंजेक्शन का समर्थन करता है; कंस्ट्रक्टर्स पर इंजेक्शन के लिए फिट नहीं है। JSF कल्पनाआवश्यकता है कि प्रबंधित बीन्स में एक सार्वजनिक शून्य-तर्क निर्माता होना चाहिए। आगे यह कहता है, “इस विनिर्देश के संस्करण 2.3 के अनुसार, इस खंड में निर्दिष्ट प्रबंधित बीन सुविधा का उपयोग दृढ़ता से हतोत्साहित किया जाता है। उसी समस्या को हल करने के लिए एक बेहतर और अधिक सुसंगत एकीकृत समाधान जेनेट-365 में निर्दिष्ट कॉन्टेक्ट्स और डिपेंडेंसी इंजेक्शन (सीडीआई) का उपयोग करना है। "दूसरे शब्दों में, सीडीआई प्रबंधित बीन्स का उपयोग किया जा सकता है, जो कंस्ट्रक्टर्स एंकल पर टाइपसेफ निर्भरता इंजेक्शन प्रदान करता है। स्प्रिंग बीन्स के लिए। CDI विनिर्देशन प्रबंधित बीन्स विनिर्देशन को अपनाता है, जो कि JEE प्लेटफ़ॉर्म के सभी कंटेनरों पर लागू होता है, न कि केवल वेब स्तरीय। इस प्रकार, वेब कंटेनर को CDI विनिर्देश को लागू करने की आवश्यकता होती है।
यहाँ से एक अर्क है प्रबंधित बीन विनिर्देशन
"प्रबंधित बीन्स न्यूनतम आवश्यकताओं वाली कंटेनर-प्रबंधित वस्तुएं हैं, जिन्हें अन्यथा" POJOs "के तहत जाना जाता है (प्लेन ओल्ड जावा ऑब्जेक्ट्स) ... उन्हें जावा प्लेटफॉर्म पर पाए जाने वाले JavaBeans घटक मॉडल के जावा ईई प्लेटफ़ॉर्म-वर्धित संस्करण के रूप में देखा जा सकता है। ...। यह पाठक द्वारा याद नहीं किया जाएगा कि प्रबंधित बीन्स के पास जावास्वर फ़ेस (जेएसएफ) तकनीक में पाई जाने वाली घर की सुविधा में एक अग्रदूत है ... प्रबंधित बीन्स इस विनिर्देश में परिभाषित के रूप में जेएसएफ में पाए जाने वाले सामान्यीकरण का प्रतिनिधित्व करते हैं। विशेष रूप से, प्रबंधित बीन्स का उपयोग जावा ईई एप्लिकेशन में कहीं भी किया जा सकता है, न केवल वेब मॉड्यूल में। उदाहरण के लिए, बुनियादी घटक मॉडल में, प्रबंधित बीन्स को एक नो-तर्क निर्माता प्रदान करना चाहिए, लेकिन एक विनिर्देश जो प्रबंधित बीन्स पर बनाता है, जैसे कि CDI (JSR-299), उस आवश्यकता को शिथिल कर सकते हैं और प्रबंधित बीन्स को अधिक जटिल हस्ताक्षरों के साथ कंस्ट्रक्टर प्रदान करने की अनुमति दे सकते हैं, जब तक कि वे कुछ अच्छी तरह से परिभाषित नियमों का पालन करते हैं ... एक प्रबंधित बीन नहीं होना चाहिए: एक अंतिम वर्ग, एक सार वर्ग, एक गैर-स्थिर आंतरिक वर्ग। । एक प्रबंधित बीन एक नियमित जावाबीन घटक के विपरीत क्रमिक नहीं हो सकता है। " इस प्रकार, प्रबंधित बीन्स के लिए विनिर्देश, जिसे अन्यथा पीओजेओ या पीओजेओ बीन्स के रूप में जाना जाता है, सीडीआई में विस्तार की अनुमति देता है।
सीडीआई विनिर्देश पुन: परिभाषित बीन्स को प्रबंधित करता है: जब जावा ईई में चल रहा है, तो एक शीर्ष-स्तरीय जावा वर्ग एक प्रबंधित बीन है यदि यह आवश्यकताओं को पूरा करता है:
• यह एक आंतरिक वर्ग नहीं है। • यह एक गैर-अमूर्त वर्ग है, या एनोटेट @ डायकोरेटर है। • यह javax.enterprise.inject.spi.Extension को लागू नहीं करता है। • यह @Vetoed या एनोटेट @Vetoed पैकेज में एनोटेट नहीं है। • इसमें एक उपयुक्त कंस्ट्रक्टर है, या तो: क्लास में कोई पैरामीटर वाला एक कंस्ट्रक्टर है, या क्लास ने एक निर्माणकर्ता @ एनोटेट घोषित किया है।
इन परिस्थितियों को पूरा करने वाले सभी जावा वर्ग प्रबंधित फलियाँ हैं और इस प्रकार प्रबंधित बीन को परिभाषित करने के लिए किसी विशेष घोषणा की आवश्यकता नहीं होती है। या
अगर इसे किसी अन्य जावा ईई विनिर्देश द्वारा प्रबंधित बीन के रूप में परिभाषित किया गया है और यदि
• यह एक EJB घटक-परिभाषित एनोटेशन के साथ एनोटेट नहीं है या ejb-jar.xml में EJB बीन वर्ग के रूप में घोषित किया गया है।
स्प्रिंग बीन्स के विपरीत यह सरल-प्रकारों के साथ कंस्ट्रक्टर्स का समर्थन नहीं करता है, जो संभव हो सकता है यदि यह स्प्रिंग या किसी भी एनोटेशन जैसी एक्सएमएल कॉन्फिग फाइलों के साथ कॉन्फ़िगरेशन का समर्थन करता है।
EJB एक EJB कंटेनर में चलते हैं। इसकी विशिष्टताकहते हैं: "एक सत्र बीन घटक एक प्रबंधित बीन है।" "कक्षा में एक सार्वजनिक निर्माणकर्ता होना चाहिए जो कोई तर्क नहीं लेता है," यह सत्र बीन और संदेश-संचालित बीन दोनों के लिए कहता है। इसके अलावा, यह कहता है, "सत्र बीन वर्ग। सत्रबाइन इंटरफ़ेस या सीरियल इंटरफ़ेस लागू करने के लिए आवश्यक नहीं है। " जेएसएफ बीन्स के समान कारण के लिए, कि ईजेबी 3 निर्भरता इंजेक्शन मूल रूप से संसाधन इंजेक्शन है, जेएसएफ बीन्स तर्कों के साथ निर्माणकर्ताओं का समर्थन नहीं करते हैं, जो कि निर्भरता इंजेक्शन के माध्यम से है। हालांकि, अगर ईजेबी कंटेनर सीडीआई को लागू करता है, "वैकल्पिक रूप से: वर्ग हो सकता है। अतिरिक्त निर्माणकर्ता को इंजेक्ट एनोटेशन के साथ एनोटेट किया गया, "यह सत्र बीन और संदेश-संचालित बीन दोनों के लिए कहता है क्योंकि," एक EJB एक CDI बीन संग्रह में पैक किया गया था और javax.enterprise.ject.Vetoed एनोटेशन के साथ एनोटेट नहीं किया गया था, जिसे CDI- सक्षम माना जाता है सेम।"