2010-11-11 15 views
12

मैं एक नया, जेपीए + स्प्रिंग प्रोजेक्ट स्थापित कर रहा हूं।वसंत: एनोटेशन-संचालित लेनदेन प्रबंधक

<tx:annotation-driven transaction-manager="transactionManager" /> 

और

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 

मेरी applicationContext.xml में: (एक प्रोग्रामर के रूप में मेरे लिए) अंतर के बीच क्या है?

उत्तर

28

वहाँ प्रॉक्सी पर जाएं और बाइट कोड weaven पहलुओं के बीच एक बड़ा अंतर है। प्रॉक्सी केवल "बाहरी अंतरिक्ष" से आवेदक आती है, लेकिन अगर ऑब्जेक्ट ऑब्जेक्ट से ही आती है, तो यह नहीं रोक सकता है (यह .transactionalMethod())

इसका मतलब है कि यदि आपके पास दो विधियों के साथ कक्षा है, टी और बी विधि T में एक लेन-देन एनोटेशन है, और विधि BT को “this.T() द्वारा आमंत्रित करती है ", तो प्रॉक्सी को कभी भी नहीं बुलाया जाता है (T के लिए) इसलिए इस मामले में कोई लेनदेन हैंडलिंग नहीं है!

यदि आप AspectJ का उपयोग करते हैं तो लेनदेन हैंडलिंग कोड T के बाइट कोड में स्वस्थ है, और यह निष्पादित नहीं किया जाएगा कि आमंत्रण ऑब्जेक्ट से या किसी अन्य ऑब्जेक्ट से आता है या नहीं।

+0

स्पष्ट और सरल शब्दों के साथ व्याख्या करने के लिए आपको बहुत बहुत धन्यवाद। –

6

The docs कहते हैं:

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

इससे कोई फर्क नहीं करता है (एक डेवलपर के नजरिए से) जो मोड उपयोग किया जाएगा।

+0

ओह धन्यवाद। किसी कारण से मुझे यह जानकारी नहीं मिल सका। –

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