2013-06-15 4 views
5

मैं पहलूजे का उपयोग कर एक गैर वसंत एओपी पहलू लिख रहा हूं और मैं इसके लिए पहले सलाह लिख रहा हूं।क्या आप कच्चे पहलू से अपवाद फेंक सकते हैं सलाह

मेरी सलाह से पहले, मान लीजिए कि मैं एक फाइल खोलना चाहता हूं। इसलिए मैं इस तरह के रूप में यह निष्पादित करें:

public before(): mypointcut() { 
    File file = new File("myfile"); 
    file.getCanonicalPath(); 
} 

लेकिन इंटेलीजे IOException एक बिना क्रिया का अपवाद होने के बारे में शिकंजा। मैं सलाह से पहले कैसे लिख सकता हूं कि यह अपवाद को पकड़ और पुनर्स्थापित कर सकता है या अनचाहे अपवाद की अनुमति दे सकता है?

उत्तर

2

क्रम अपवाद अप कॉल स्टैक आप एक आपकी सलाह के लिए घोषणा फेंकता है सिर्फ एक सामान्य विधि कॉल के साथ की तरह जोड़ना होगा हाथ में:

public before() throws IOException: mypointcut() {...} 

यह सलाह केवल तरीकों कि घोषणा इस फेंकने पर लागू किया जा सकता अपवाद (या अपवाद का अभिभावक) स्वयं।

आदेश में यह rethrow करने के लिए आप अपवाद को पकड़ने और इतने तरह RuntimeException का एक उदाहरण में यह rethrow करने की जरूरत है: यदि यह एक अच्छा विचार है एक एक और कहानी है है

public before(): mypointcut() { 
    File file = new File("myfile"); 
    try { 
     file.getCanonicalPath(); 
    } catch (IOException ex) { 
     throw new RuntimeException(e); 
    } 
} 

...

+0

मैं देखें कि मेरा भ्रम कहाँ था। मैंने हाल ही में पढ़ा है (http://www.eclipse.org/aspectj/doc/next/progguide/semantics-advice.html) कि सलाह केवल कुछ प्रकार के अपवाद फेंक सकती हैं: रनटाइम उनमें से एक है। तो आप सही हैं, अगर मुझे अपवाद मिलता है, तो मुझे इसे "सलाह फेंकने योग्य" अपवाद में लपेटने की ज़रूरत है। – Eric

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