14、动态横切修改行为:环绕通知与连接点上下文收集

动态横切修改行为:环绕通知与连接点上下文收集

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 执行被通知的连接点

若要在环绕通知中执行被通知的连

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值