基于@within | @target | @annotation注解的AOP切面

@within注解(类级)

注意:该注解是类级别注解, 通常与 @Around@Before@After 等注解结合使用,指定在特定类上执行的切面逻辑

"@within(com.annotation.other.A)"该配置就是:如果某个类上标注了注解@A,那么该类中所有方法就会被匹配为切点,并且该类的子类中如果没有重写父类方法也会被匹配为切点,如果该类继承了其他类,那么从其父类继承过来的方法也不会被识别成切点。

@A
public  class Human {

    public void say(String sentence)
    {
        System.out.println("Human says:" + sentence);
    }
    public void run()
    {
        System.out.println("Human runs." );
    }
}
----------------------------------------------------------
@Aspect
@Component
public class HumanAspect {

    @Before("@within(com.annotation.other.B)")
    public void execute1(){
        System.out.println("@within --- A1");
    }
}
Human中所有方法执行都会经过execute1
----------------------------------------------------------
public class Man extend Human {
}
Man继承了Human,Man中继承的来自Human中的未重写方法会被切面识别

@target 注解(类级)

注意:该注解也是类级别注解, 通常与 @Around@Before@After 等注解结合使用,指定在特定类上执行的切面逻辑

"@target(com.annotation.other.B)"该配置就是:如果某个类上标注了注解@B,那么该类中所有方法就会被匹配为切点,不影响其子类和父类

@annotation注解(方法级)

注意:该注解是方法级别注解, 通常与 @Around@Before@After 等注解结合使用,指定在特定类上执行的切面逻辑

"@annotation(com.annotation.other.C)"该配置就是:如果某个方法上标注了注解@c,那么该方法就会被匹配为切点。

总结

  • @within会匹配到标注了指定注解的类,并且在该类的子类中,那些没有重写父类方法也会被匹配到。

  • @target只匹配标注了指定注解的类。不涉及任何其他类

  • @annotation只匹配方法。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值