2010-12-29 15 views
24

मैं पाइथन में अपना अधिकांश समय प्रोग्रामिंग खर्च करता हूं, इसलिए मुझे क्षमा करें यदि इस समस्या का मेरा दृष्टिकोण छोटा है:जावा में पायथन जैसी सजावट?

मैं कक्षा के कुछ तरीकों को लॉगिन प्रमाण-पत्रों की आवश्यकता है। बस, प्रत्येक विधि को जांचना चाहिए कि कक्षा परिवर्तनीय user सेट है, और यदि ऐसा है, तो जारी रखें, लेकिन यदि नहीं, तो "आपको लॉगिन करने की आवश्यकता है" संदेश थूकें।

पायथन में, मैं बस ऐसा करने के लिए एक सजावट लिखूंगा। मैं जावा में एक ही चीज़ को यथासंभव कम अनावश्यक कोड के साथ कैसे पूरा कर सकता हूं?

धन्यवाद!

+1

आप इस प्रश्न का उत्तर भी देख सकते हैं: http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-decorating –

उत्तर

12

जावा में इसे हल करने का एक तरीका Aspect-oriented programming उपकरण का उपयोग करना है। ऐसा एक उपकरण AspectJ है। आपको शायद पता चलेगा कि इस प्रकार की समस्या एक उदाहरण है जिसका प्रयोग आम तौर पर एओपी को प्रेरित करने के लिए किया जाता है।

एओपी इस विशेष समस्या को हल करने के लिए एक बहुत ही भारी वजन वाला तरीका हो सकता है, ताकि आप प्रत्येक विधि में उचित जांच जोड़ना चाहें। मूल जावा में पाइथन के सजावट के लिए कोई प्रत्यक्ष समतुल्य नहीं है।

+0

उत्तर के लिए धन्यवाद। मेरे पास इस तरह के कई अन्य मुद्दे हैं, इसलिए यह 'हेवीवेट' भी नहीं हो सकता है। मैं AspectJ के साथ ही गुइस में देखता हूँ। – awegawef

8

करने के लिए सबसे आसान बात यह है कि "assertCredentials" जैसी विधि लिखना और उस विधि को उस विधि को कॉल करें जिसे प्रमाण पत्र की आवश्यकता है। यदि प्रमाण-पत्र सेट नहीं हैं, तो विधि को अपवाद फेंकना चाहिए, जो मूल विधि को रोक देगा।

जावा में एनोटेशन हैं जिनका उपयोग विधियों को सजाने के लिए किया जा सकता है, लेकिन मुझे नहीं लगता कि इस मामले में एनोटेशन का उपयोग चीजों को सरल बना देगा।

-2

आपको bean validation framework पर देखना चाहिए।

+0

मुझे नहीं लगता कि बीन सत्यापन मदद करता है। 1) यह निहित है कि अन्य विधियों को प्रमाण-पत्रों की आवश्यकता नहीं है, इसलिए आप किसी ऑब्जेक्ट को बिना किसी क्रेडेंशियल्स के "अमान्य" के रूप में इलाज कर सकते हैं। 2) सत्यापन ढांचा गारंटी नहीं देता है कि वस्तुओं हमेशा वैसे भी वैध हैं। आपको "मान्य" विधि को कॉल करना होगा ... –

6

आप Google Guice AOP को आजमा सकते हैं जो एएसपी फ्रेमवर्क की अपेक्षा अपेक्षाकृत अधिक हल्का है जैसे AspectJ।

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