动态横切修改行为:环绕通知与连接点上下文收集
1. 异常抛出后通知
异常抛出后通知(after throwing advice)允许我们在连接点抛出异常时执行额外逻辑。在 throwing() 部分指定异常对象名称后,就可以在通知体中使用该异常对象。例如:
after() throwing(Throwable ex )
: execution(* *(..)) {
System.out.println("Exception " + ex
+ " while executing "
+ thisJoinPoint );
}
这里的 thisJoinPoint 是一个特殊变量,携带连接点上下文信息。除非异常抛出后通知本身抛出异常,否则原始异常处理会继续沿着调用栈向上进行,即该通知不能“吞掉”异常,连接点的调用者会收到连接点抛出的异常。
2. 环绕通知
环绕通知(Around advice)是最强大的通知类型,它可以实现其他类型通知的功能。它能够以相同或不同的上下文执行连接点任意次数(包括零次),可以绕过被通知的连接点或多次执行该连接点。常见用途如下:
- 在被通知的连接点前后执行额外逻辑(如性能分析)。
- 绕过原始操作并执行替代逻辑(如缓存)。
- 使用 try/catch 块环绕操作以执行异常处理策略(如事务管理)。
2.1 执行被通知的连接点
若要在环绕通知中执行被通知的连
超级会员免费看
订阅专栏 解锁全文
28

被折叠的 条评论
为什么被折叠?



