मैं इस बात से परिचित नहीं हूं कि सीम कैसे काम करता है इसलिए अगर यह उत्तर लागू नहीं होता है तो मैं पहले से क्षमा चाहता हूं।
मैंने देखा कि वह विधि जो @Transactional
. है protected
है . यह मेरे लिए तात्पर्य है कि इसे किसी अन्य आंतरिक विधि द्वारा बुलाया जा रहा है।
स्प्रिंग के AOP के साथ, आप सार्वजनिक . को चिह्नित करते हैं @Transactional
. के साथ तरीके जो लिपटे हुए हैं और एक लेनदेन प्रॉक्सी के साथ बदल दिए गए हैं। जब कोई बाहरी वर्ग public
. को कॉल करता है विधि, यह प्रॉक्सी को कॉल कर रही है जो लेनदेन बनाती है। यदि बाहरी वर्ग किसी अन्य public
को कॉल करता है विधि जो नहीं है @Transactional
. से चिह्नित जो तब एक आंतरिक विधि कहता है, कोई लेनदेन नहीं होगा क्योंकि प्रॉक्सी को बिल्कुल भी नहीं बुलाया जा रहा है।
वसंत ऋतु में, भले ही आप अपना doWork()
बदल दें सार्वजनिक होने का तरीका, वही समस्या होगी। कोई लेनदेन नहीं क्योंकि प्रॉक्सी ऑब्जेक्ट नहीं कहा जा रहा है। क्लास के अंदर किए गए मेथड कॉल्स प्रॉक्सी ऑब्जेक्ट को कॉल नहीं कर रहे हैं।
कुछ दस्तावेज़ों को तुरंत पढ़ने से यह संकेत मिलता है कि, स्प्रिंग एओपी की तरह, सीम CGLib प्रॉक्सीइंग का उपयोग कर रहा है। . सवाल यह है कि क्या यह सभी तरीकों को प्रॉक्सी करने में सक्षम है - भले ही उन्हें प्रॉक्सी ऑब्जेक्ट के भीतर से बुलाया गया हो। यदि यह उत्तर लागू नहीं होता है तो अपना समय बर्बाद करने के लिए क्षमा करें।