2011-12-01 39 views
7

Tôi đang cố gắng để cấu hình mùa xuân để nó thực hiện lời khuyên khi một lớp con ngoại lệ cụ thể (MyTestException) được ném:Spring AOP và ngoại lệ Chặn

public class MyTestExceptionInterceptor implements ThrowsAdvice { 
    public void afterThrowing(Method method, Object[] args, Object target, Exception exc) { 
     // I want this to get executed every time a MyTestException is thrown, 
     // regardless of the package/class/method that is throwing it. 
    } 
} 

Và cấu hình XML:

<bean name="interceptor" class="org.me.myproject.MyTestExceptionInterceptor"/> 

<aop:config> 
    <aop:advisor advice-ref="interceptor" pointcut="execution(???)"/> 
</aop:config> 

Tôi có cảm giác rằng tôi nên sử dụng công cụ chỉ định điểm số target (thay vì execution) vì - theo số Spring docs - có vẻ như là target cho phép tôi chỉ định loại ngoại lệ để đối sánh lại t, nhưng tôi không chắc chắn nếu đó là sai, hoặc những gì thuộc tính pointcut của tôi cần phải như thế nào.

tôi sẽ rất muốn giữ cấu hình AOP thực hiện trong XML (như trái ngược với Java/chú thích, nhưng tôi có thể có thể dịch một giải pháp chú thích dựa vào XML nếu cần thiết.

Trả lời

8

Tôi muốn sử dụng một <aop:after-throwing> elementthrowing thuộc tính của nó.

mùa xuân cấu hình

<bean name="tc" class="foo.bar.ThrowingClass"/> 

<bean name="logex" class="foo.bar.LogException"/> 

<aop:config> 
    <aop:aspect id="afterThrowingExample" ref="logex"> 
    <aop:after-throwing method="logIt" throwing="ex" 
         pointcut="execution(* foo.bar.*.foo(..))"/> 
    </aop:aspect> 
</aop:config> 

Các.210 thuộc tính là tên tham số của phương pháp xử lý của khía cạnh (ở đây nó LogException.logIt) mà được gọi vào ngoại lệ:

Aspect

public class LogException { 
    public void logIt(AnException ex) { 
     System.out.println("*** " + ex.getMessage()); 
    } 
} 

XML và phương pháp kết hợp xác định loại ngoại lệ mà các khía cạnh áp dụng đến. Trong ví dụ này, ThrowingClass ném AnExceptionAnotherException. Chỉ có AnException sẽ có lời khuyên được áp dụng vì chữ ký của phương pháp tư vấn.

See example project on github for full source.

1

Kiểm tra AfterThrowingAdvice. Một ví dụ được tìm thấy here (tìm kiếm "Sau khi gửi lời khuyên") và bạn sẽ tìm thấy nó.

Các vấn đề liên quan