methods - Guice में विधि इंटरसेप्टर के आदेश को परिभाषित करने के लिए कैसे?



aop interceptor (1)

कभी-कभी विधि इंटरसेप्टर के आदेश को जानने की आवश्यकता होती है, जो कि गाइड में एक विधि कॉल को रोकते हैं। एक सरल उदाहरण परिदृश्य का उपयोग करने के लिए किया जाएगा guice-persist @Transactional विधि इंटरसेप्टर के साथ एक कस्टम @ वापसी विधि इंटरसेप्टर पुनः ट्रांस्क्रिप्ट इंटरसेप्टर ट्रांज़ेक्शन इंटरसेप्टर के बाहर चलाया जाना चाहिए ताकि यह सुनिश्चित किया जा सके कि एक ही लेन-देन में पुनः प्रयास निष्पादित नहीं किए जा रहे हैं।

स्प्रिंग में आप यह सुनिश्चित करने के लिए इंटरसेप्टर के लिए आदेशित इंटरफ़ेस का उपयोग कर सकते हैं कि ट्रांज़ैक्शन इंटरसेप्टर को पुनः प्रयास इंटरसेप्टर के भीतर निष्पादित किया गया है। क्या गिस में ही हासिल करने का कोई तरीका है?


Guice उस क्रम में इंटरसेप्टर को आमंत्रित करता है जिसमें वे पंजीकृत थे। इसलिए यदि आप उन्हें इस तरह से परिभाषित करते हैं:

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor);
bindInterceptor(any(), annotatedWith(Transactional.class), transactionalInterceptor);

या

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor, transactionalInterceptor);

retryInterceptor transactionalInterceptor retryInterceptor से पहले निष्पादित होगा।

यदि आपके पास एक से अधिक मॉड्यूल हैं तो उसी पर लागू होता है - पहले मॉड्यूल के इंटरसेप्टर को सेकंड मॉड्यूल के इंटरसेप्टर से पहले निष्पादित किया जाता है।





interceptor