spring aop pointCut

Spring Aop PointCut

精华帖:https://blog.csdn.net/qq_23167527/article/details/78623639

五种连接点Pointcut表达式概要

  1. execution
    表达式用于匹配方法执行join point连接点,表达式的最小粒度是方法,使用最多。
    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
  • ?表示当前项可以有也可以没有

  • modifiers-pattern:方法的可见性,如public,protected;

  • ret-type-pattern:方法的返回值类型,如int,void等;

  • declaring-type-pattern:方法所在类的全路径名,如com.test.User;

  • name-pattern:方法名类型,如log();

  • param-pattern:方法的参数类型,如String, Integer;

  • throws-pattern:方法抛出的异常类型,如java.lang.Exception;

    例子:
    //匹配com.test.dao包下的任意接口和类的任意方法
    @Pointcut(“execution(* com.test.dao..(…))”)
    //匹配com.test.dao包下的任意接口和类的public方法
    @Pointcut(“execution(public * com.test.dao..(…))”)

    常见写法:
    @Pointcut("execution( com.test.controller..(…))")*
    解释:

    • . execution(): 表达式主体。
    • 第一个*号:表示返回类型,*号表示所有的类型。
    • 包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包
    • 第二个*号:表示类名,*号表示所有的类。
    • *(…):最后这个星号表示方法名,*号表示所有的方法,
    • 后面括弧里面表示方法的参数,两个句点表示任何参数。
  1. within & @within
    表达式的最小粒度为

    例子:
    //匹配com.test.dao包中的任意方法
    @Pointcut(“within(com.tset.dao.)")
    //匹配com.test.dao包及其子包中的任意方法
     @Pointcut("within(com.test.dao…
    )”)
    注意:. 和…
    @within 等同于@target

  2. args & @args
    表达式是匹配指定参数类型和指定参数数量的方法,与包名和类名无关。

    例子:
    //匹配运行时传递的参数类型为指定类型的、且参数个数和顺序匹配
    @Pointcut(“args(java.test.User)”)
    //接受一个参数,并且传递的参数的运行时类型具有@Valid的对象
     @Pointcut("@args(com.test.Valid)")

  3. this
    在使用JDK代理时,代理对象指向接口和代理类Proxy,使用cglib代理时,代理对象指向接口和子类。
    我理解是调用类或接口

    例子:
    //配置代理接口和类
    @Pointcut(“this(com.test.dao.UserDao)”)

  4. target & @target
    表达式指向被代理对象的接口和子类

    例子:
    //匹配被代理对象的全限定名
    @Pointcut(“target(com.test.dao.impl.UserDaoImpl)”)
    //匹配有特定注解的对象的执行方法,注解类型必须是全限定名
    @Pointcut("@target(com.test.Valid)")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

excellentchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值