2011-04-19 9 views
8

मैं वर्तमान में रनटाइम पर सेवा विधियों को पारित पैरामीटर को कैप्चर करने के लिए JoinPoint का उपयोग कर रहा हूं। हालांकि जॉइनपॉइंट मुझे पैरामीटर मानों को पुनर्प्राप्त करने में मदद करता है, लेकिन मुझे लगता है कि यह पैरामीटर पारित होने पर पैरामीटर, पैरामीटर प्रकार, व्यक्तिगत पैरामीटर मानों के नामों को पुनर्प्राप्त करने के लिए कोई अच्छा एपीआई प्रदान नहीं करता है।AspectJ JoinPoint प्रश्न

यहां एक उदाहरण है :

public void doIt(String user, Attribute[] attr, Integer[] i, boolean bool, List<Attribute> list){.....} 

उपरोक्त विधि के लिए, जब मैं JoinPoint.getArgs() का उपयोग, मैं पैरामीटर जो किसी सरणी या एक संग्रह है के लिए एक कचरा मूल्य देखते हैं। यदि पैरामीटर एक सरणी या संग्रह है, तो मैं कैसे सत्यापित कर सकता हूं कि वे उनमें से एक हैं और मैं व्यक्तिगत मूल्यों को पुनर्प्राप्त करने के लिए उन्हें कैसे पार कर सकता हूं?

कोई सुझाव? धन्यवाद

उत्तर

20

यह काम करना चाहिए:

MethodSignature signature = (MethodSignature)joinPoint.getSignature(); 
String[] parameterNames = signature.getParameterNames(); 
Object[] parameterValues = joinPoint.getArgs(); 

parameterNames से मेल खाना चाहिए क्या आप में

अद्यतन 1 बीत चुके हैं:। आप शायद डिबगिंग प्रतीकों के साथ संकलन कर रहे हैं बंद कर दिया - (स्पष्ट रूप से javac में गुजर - जी: कोई नहीं, या मेवेन/चींटी में झंडे के माध्यम से)। डिबगिंग प्रतीकों को बंद करने के साथ, नाम उपलब्ध नहीं होंगे और संकलक द्वारा args1 आदि के साथ प्रतिस्थापित किया जाएगा। डीबग प्रतीकों के साथ एक संकलन के साथ प्रयास करें जो स्पष्ट रूप से बंद नहीं है।

+0

मेरा अनुरोध स्वीकार, यह काम करने के लिए प्रतीत नहीं होता। यह arg0 arg1 arg2 arg3 arg4 इत्यादि – soontobeared

+0

मैंने अपना उत्तर अपडेट कर दिया है, शायद आपके पास डीबग प्रतीकों को बंद कर दिया गया है। डिबग प्रतीकों को स्पष्ट रूप से बंद किए बिना प्रयास करें, पैरामीटर नामों को फिर से सही तरीके से पुनर्प्राप्त किया जाना चाहिए। –

+0

@ बिजू क्या आपको पता है कि मैवेन में डीबग प्रतीकों को कैसे चालू किया जाए? – Modi

2

AspectJ

public pointcut pointcutName(): 
     execution(* ClassName.method(..)); 

pointcut

before():pointcutName(){ 
String[] paramNames = ((CodeSignature) thisJoinPointStaticPart 
       .getSignature()).getParameterNames(); 
for(String paramName:paramNames){ 
      System.out.println(paramName); 
     } 
} 

हो रही है पैरामीटर मान विधि के पैरामीटर के नाम हो रही है:

before():pointcutName(){ 
Object[] paramValues = thisJoinPoint.getArgs(); 

for (Object object:paramValues){ 
     System.out.println(object.toString); 
     } 
} 

विधि वापसी मूल्य हो रही है:

after() returning(Object objectReturn) :pointcutName(){ 
    System.out.println(objectReturn); 
} 
संबंधित मुद्दे