2011-04-13 12 views
14

मैं सलाहकृत विधि कॉल से हस्ताक्षर और तर्क प्राप्त करने में सक्षम हूं, लेकिन मैं यह नहीं समझ सकता कि वापसी मूल्य या अपवाद कैसे प्राप्त करें। मुझे लगता है कि यह किसी भी तरह से आसपास और आगे बढ़कर किया जा सकता है।AspectJ से वापसी मूल्य या अपवाद प्राप्त करना?

उत्तर

13

आप after() returning और after() throwing सलाह the following document की शुरुआत में सलाह दे सकते हैं। यदि आप @AspectJ वाक्यविन्यास का उपयोग कर रहे हैं तो कृपया @AfterReturning और @AfterThrowing एनोटेशन देखें (आप नमूने here पा सकते हैं)।

5

around() सलाह का उपयोग करके, आप proceed() का उपयोग कर अवरोधित विधि कॉल का वापसी मूल्य प्राप्त कर सकते हैं। यदि आप चाहें तो विधि द्वारा लौटाए गए मूल्य को भी बदल सकते हैं।

उदाहरण के लिए, मान लीजिए आप वर्ग MyClass के अंदर एक विधि m() है:

public class MyClass { 
    int m() { 
    return 2; 
    } 
} 

मान लीजिए आप अपने स्वयं के .aj फ़ाइल में निम्न पहलू है:

public aspect mAspect { 
    pointcut mexec() : execution(* m(..)); 

    int around() : mexec() {  
    // use proceed() to do the computation of the original method 
    int original_return_value = proceed(); 

    // change the return value of m() 
    return original_return_value * 100; 
    } 
} 
6

तुम भी वापसी मान प्राप्त कर सकते हैं सलाह को पुनः प्राप्त करने के बाद का उपयोग करना।

package com.eos.poc.test; 

public class AOPDemo { 
      public static void main(String[] args) { 
       AOPDemo demo = new AOPDemo(); 
       String result= demo.append("Eclipse", " aspectJ"); 
      } 
      public String append(String s1, String s2) { 
       System.out.println("Executing append method.."); 
       return s1 + s2; 
      } 

} 

हो रही वापसी मान के लिए परिभाषित पहलू:

public aspect DemoAspect { 
    pointcut callDemoAspectPointCut(): 
     call(* com.eos.poc.test.AOPDemo.append(*,*)); 

    after() returning(Object r) :callDemoAspectPointCut(){ 
     System.out.println("Return value: "+r.toString()); // getting return value 

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