2013-05-16 7 views
11

जेपीए का उपयोग कर एक परियोजना में, मैं आमतौर पर इस तरह एक वस्तु प्राप्त करने के लिए@ इंजेक्शन और @ पर्सिस्टेंस कॉन्टेक्स्ट के बीच क्या अंतर है?

@Inject EntityManager em; 

का उपयोग करें। मैंने देखा कि वेब में कई कोड स्निपेट इसके बजाए उपयोग करते हैं:

@PersistenceContext EntityManager em; 

इन विकल्पों के बीच क्या अंतर है?

मेरा कोड जेबॉस ईएपी 6.1 और हाइबरनेट पर चलता है।

उत्तर

6

@PersistenceContext एक विशिष्ट एनोटेशन है जो एक कंटेनर-प्रबंधित इकाई प्रबंधक पर निर्भरता घोषित करता है। यह आपको दृढ़ता प्रकार जैसे अधिक पैरामीटर निर्दिष्ट करने की अनुमति देता है। जब आप एक राज्य सत्र सत्र बीन के पूरे जीवन चक्र के लिए दृढ़ता संदर्भ बनाए रखना चाहते हैं तो दृढ़ता प्रकार को विस्तारित करना महत्वपूर्ण है। @PersistenceContext एक जेपीए एनोटेशन है।

@Inject एक सीडीआई एनोटेशन है। यह बहुत सामान्य है और विभिन्न प्रकार की वस्तुओं को इंजेक्ट करने के लिए इस्तेमाल किया जा सकता है।

5

@PersistenceContext एक बहुत ही विशिष्ट एनोटेशन है और यह कह रहा है "इस क्षेत्र को दृढ़ता संदर्भ के साथ इंजेक्ट करें"। आप इसे किसी प्रबंधित संदर्भ के बाहर उपयोग नहीं कर सकते हैं।

@Inject दूसरी ओर, बहुत सामान्य है। यह कहता है, "आपको इस क्षेत्र को इंजेक्ट करना चाहिए।" यह एक दृढ़ता संदर्भ के लिए जरूरी नहीं है, लेकिन कुछ भी जिसे आप इंजेक्शन के रूप में परिभाषित करना चाहते हैं।

This article (जो आप पूछ रहे हैं के सेब के लिए बिल्कुल सेब नहीं है) आपके लिए अधिक प्रकाश डाल सकता है।

आप क्या @Inject है के स्रोत को सीधे जाने के लिए चाहते हैं, you can read the spec here:

@Inject, एक बिंदु है जिस पर एक जावा वर्ग या अंतरफलक पर निर्भरता इंजेक्ट किया जा सकता को पहचानती है। कंटेनर तब आवश्यक संसाधन प्रदान करता है। इस उदाहरण में, लॉगिन बीन दो इंजेक्शन बिंदु निर्दिष्ट करता है।

+0

मुझे अभी तक आपका जवाब पसंद है, लेकिन दूसरे के बजाय एक विकल्प चुनने के क्या परिणाम हैं? –

+0

मुझे नहीं पता :(यह सब मुझे इस मुद्दे पर मिल सकता है। –

0

@Inject आपको कंटेनर EntityManager माना जाता है कि यह केवल एक ही है।

हालांकि, यदि आपके पास एक से अधिक होने की आवश्यकता है तो आपको कुछ क्वालीफायर एनोटेशन के माध्यम से जाना होगा और आपके लिए इसे कुछ उत्पादित करना होगा या आप unitName@PersistenceContext एनोटेशन में विशेषता दे सकते हैं।

संबंधित मुद्दे