After throwing advice(异常抛出增强处理)
翻译了一下文档。
当一个目标方法通过抛出异常退出执行时,将会执行异常抛出增强处理。异常抛出增强处理是使用@AfterThrowing注释声明的(你可以用@AfterThrowing来声明异常抛出增强处理):
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
@Aspect
public class AfterThrowingExample {
@AfterThrowing("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doRecoveryActions() {
// ...
}
}
大多数情况下,你希望仅在抛出一个指定类型的异常后才执行增强处理,并且通常还需要访问增强处理方法体中抛出的异常。可以使用throwing属性限制匹配(如果需要,则使用Throwable作为异常类型),并且将抛出的异常绑定给增强处理的参数。
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
@Aspect
public class AfterThrowingExample {
@AfterThrowing(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
throwing="ex")
public void doRecoveryActions(DataAccessException ex) {
// ...
}
}
“throwing”属性中使用的名称必须和增强处理方法中的参数名称相对应。当一个方法通过抛出异常退出执行时,异常会作为相对应的参数值传递给增强处理方法。Throwing子句限制只匹配那些抛出指定类型异常(本例中为DataAccessException)的方法执行。