2013-06-15 10 views
5

Piszę non-spring aspekt Aop za pomocą aspectJ i piszę przed porady dla niego.Czy możesz rzucić wyjątek od Raw AspectJ Przed poradą

W mojej wcześniejszej radzie powiedzmy, że chcę otworzyć plik. Więc wykonać go jako takie:

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

Ale IntelliJ zastrzeżenie o IOException jest nieobsługiwany wyjątek. W jaki sposób mogę napisać wcześniejszą poradę, aby mogła ona przechwycić i ponownie zgłosić wyjątek lub zezwolić na nieobsługiwany wyjątek?

Odpowiedz

2

W celu ręcznego wyjątek w górę stosu wywołań należy dodać rzuca oświadczenie radę tak jak przy normalnym wywołaniu metody:

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

Ta rada może być stosowana wyłącznie na metodach, które deklarują rzucania tego wyjątek (lub rodzic tego wyjątku).

W celu przekaż go trzeba złapać wyjątek i przekaż go w instancji RuntimeException tak:

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

Jeśli jest to dobry pomysł, to już inna historia ...

+0

I zobacz, gdzie było moje zamieszanie. Niedawno przeczytałem (http://www.eclipse.org/aspectj/doc/next/progguide/semantics-advice.html), że Advices może zgłaszać tylko niektóre rodzaje wyjątków: Runtime jest jednym z nich. Więc masz rację, jeśli otrzymam wyjątek, muszę go zawrzeć w wyjątku "rada rzucać". – Eric

Powiązane problemy