2010-11-30 15 views
30

सबसे पहले मुझे ध्यान दें, कि मैं AspectJ का उपयोग करता हूं और मुझे यह पसंद है, लेकिन मैं इसके साथ और क्या कर सकता हूं।AspectJ के लिए क्या अच्छा है?

मुझे पता है कि लॉगिंग के लिए AspectJ का उपयोग/किया जा सकता है। कुछ मामलों में इसका उपयोग लेनदेन नियंत्रण के लिए किया जाता है - ज्यादातर एनोटेशन के साथ संयोजन में लागू किया जाता है। AspectJ का उपयोग कक्षाओं (कोड-जेनरेटेड) विधियों के साथ कक्षाओं को बढ़ाने के लिए भी किया जा सकता है, जैसे स्प्रिंग रू करता है।

लेकिन मेरा मानना ​​है कि आम तौर पर एस्पेक्टजे और एओपी का उपयोग लॉगिंग, लेनदेन नियंत्रण और सिमुलेशन आंशिक कक्षाओं से अधिक के लिए किया जा सकता है।

तो AspectJ और AOP के लिए अन्य उपयोगी उपयोग के मामले क्या हैं?

+2

आप कार्रवाई में AspectJ पढ़ना चाहिए रमनिवस लैदाद द्वारा http://www.manning.com/laddad2 टीओसी आप एक दे देंगे विचार: http://www.manning.com/laddad2/excerpt_contents.html –

+2

@ जॉर्ज स्टॉकर: प्रश्न में 14 अपवॉट्स, 0 डाउनवॉट्स, कुल 21 अपवॉट्स के साथ 3 उत्तरों हैं, और आप इसे 4 साल बाद पकड़ते हैं - वास्तव में ? मुद्दा यह है कि इस प्रश्न के अच्छे जवाब हैं, इसलिए इसमें वास्तव में यह "बहुत व्यापक" समस्या नहीं है। – Ralph

+0

अगर आप बंद करने पर बहस करना चाहते हैं, तो इसे मेटा पर लाने के लिए स्वतंत्र महसूस करें। बहुत व्यापक रूप से बंद करना वोट, विचार, या वर्तमान उत्तरों से स्वतंत्र है। इसे प्रश्न के दायरे से करना है। –

उत्तर

26
  • अनुमति की जांच
  • बाधा कार्रवाई है कि बहुत लंबा या अलग थ्रेड में
  • रन कार्रवाई की जाती है यहां तक ​​कि विभिन्न प्रक्रिया या घटना के संदर्भ में अन्य मशीन
  • से पहले किसी भी डेटा/पर्यावरण की तैयारी
  • की निगरानी पर कॉल
  • खोलने/बंद करने के संसाधनों के बाद कॉल और प्रसंस्करण परिणाम

EDIT

हालांकि मैंने यह जवाब देने के बाद कई सालों बीत दिए, मैंने जवाब को और अधिक पूरा करने के लिए निम्नलिखित जोड़ने का निर्णय लिया।

  • सुरक्षा जांच।
  • एपीआई के गलत या व्यवहार के सुधार जो आप नहीं बदल सकते हैं। उदाहरण के लिए बूलियन विधि जो कुछ शर्तों में false लौटाती है लेकिन true वापस करनी चाहिए। आप AspectJ का उपयोग कर इसे ठीक कर सकते हैं।
+1

कैशिंग एक और उपयोग – ex0b1t

+0

धन्यवाद, @ ex0b1t। कोई भी सूची कभी पूर्ण नहीं होगी। – AlexR

16

Wikipedia entry आपको कुछ और उदाहरण देता है (लेकिन बहुत से नहीं)। आम तौर पर, आस्पेक्ट ओरिएंटेड प्रोग्रामिंग का उपयोग केवल उन साधारण व्यवहारों को लागू करने के लिए किया जाना चाहिए जो कक्षा की मूल चिंता का हिस्सा नहीं हैं और विभिन्न वर्गों के लिए आम हैं। जैसे ही आप अपने पहलुओं में बहुत अधिक तर्क डालना शुरू करते हैं, कोड वास्तव में अपठनीय हो जाता है।

आपके द्वारा सुझाए गए पहलू (लॉगिंग, लेनदेन, ...) का सबसे अधिक उपयोग किया जाता है। मैं सुरक्षा भी जोड़ूंगा।

2

कोई कुछ (डिज़ाइन) नियमों को लागू करने के लिए AspectJ का उपयोग कर सकता है।

  • हर नियंत्रक विधि की तरह कुछ विशेष एनोटेशन
  • हर सेवा/दृश्यपटल/डीटीओ वर्ग एक सेवा/FRONTEN/डीटीओ pacakge
  • अधिक परिपक्व की तरह सोचता है में स्थित होना चाहिए की जरूरत है: checking that setters do not have any logic

इंजेक्षन Mocks वर्गों है कि अन्यथा नए का उपयोग करके नया उदाहरण बना होगा। मान लें तो आप इस कोड है:

public void sendInvitationEmail(String address) { 
    InvitationEmail email = new InvitationEmail(); 
    email.sendTo(address).send(); 
} 

और एक नकली द्वारा email को बदलने के लिए की जरूरत है। फिर आप एक नकली "0 इंजेक्ट" करने के लिए एक पहलू (@Pointcut("call(InvitationEmail.new(..))") ) का उपयोग कर सकते हैं। - @See Blog JMock and AspectJ डैनियल रूप है, साथ ही द्वारा वसंत Roo`s @MockStaticEntityMethods (Mock Static Methods using Spring Aspect)

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

  • कोई संबंधित समस्या नहीं^_^