AspectJ中的优先级

有时候,多个通知(Advice)可能会作用于同一个连接点(JoinPoint)。这种情况下,通知Advice解析的顺序基于切面Aspect的优先级。

1 通知Advice的优先级规则

1.1 Advice在不同的Aspect中定义时

当两个advice定义在不同的切面aspect时,有三条情况:

  1. 在一定的优先级声明形式下,如果Aspect A匹配早于Aspect B时,那么对于相同的连接点,Aspect A的所有Advice的优先级都高于Aspect B。
  2. 否则,如果Aspect A是Aspect B的子Aspect,那么Aspect A的Advice优先级高于Aspect B的。因此,除非指定了优先级声明,子Aspect的Advice的优先级都高于父Aspect的。
  3. 否则,如果两个Advice定义在不同的Aspect中,他们的优先级则无法确定。

1.2 Advice在相同的Aspect中定义时

如果两个Advice定义在同一个Aspect ,有两种情况:

  1. 如果他们都是after advice,那么Aspect 中后定义的advice优先级高于先定义的advice。
  2. 否则,Aspect 中先定义的advice优先级高于后定义的advice。

2 优先级的声明

public aspect SystemArchitecture {
       declare precedence : Security*, TransactionSupport, Persistence;

       // ...
     }

//can be written as:

@Aspect
@DeclarePrecedence("Security*,org.xyz.TransactionSupport,org.xyz.Persistence")
public class SystemArchitecture {

       // ...
     }
         

 

转载于:https://my.oschina.net/yqz/blog/1611297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值