*:匹配任何数量字符;

..:匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。

+:匹配指定类型的子类型;仅能作为后缀放在类型模式后边。

234017_UIVQ_2525078.jpg

表达式示例

execution(* com.sample.service.impl...(..))

详述:

execution(),表达式的主体

第一个“”符号,表示返回值类型任意;

com.sample.service.impl,AOP所切的服务的包名,即我们的业务部分

包名后面的“..”,表示当前包及子包

第二个“”,表示类名,即所有类

.(..),表示任何方法名,括号表示参数,两个点表示任何参数类型

execution表达式语法格式

execution(?()?)

除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。

示例介绍

通过方法名定义切点

execution(public * *(..))

匹配所有目标类的public方法,第一个代表方法返回值类型,第二个代表方法名,而".."代表任意入参的方法;

execution(* To(..))

匹配目标类所有以To为后缀的方法。第一个“”代表任意方法返回类型,而“*To”代表任意以To结尾的方法名。

通过类定义切点

execution(* com.taotao.Waiter.*(..))

匹配Waiter接口的所有方法,第一个“”代表任意返回类型,“com.taotao.Waiter.”代表Waiter接口中的所有方法。

execution(* com.taotao.Waiter+.*(..))

匹配Waiter接口及其所有实现类的方法

通过包名定义切点

注意:在包名模式串中,"."表示包下的所有类,而“..**”表示包、子孙包下的所有类。

execution(* com.taotao.*(..))

匹配com.taotao包下所有类的所有方法

execution(* com.taotao..*(..))

匹配com.taotao包及其子孙包下所有类的所有方法,如com.taotao.user.dao,com.taotao.user.service等包下的所有类的所有方法。

execution(* com...Dao.find*(..))

匹配以com开头的任何包名下后缀为Dao的类,并且方法名以find为前缀,如com.taotao.UserDao#findByUserId()、com.taotao.dao.ForumDao#findById()的方法都是匹配切点。

通过方法入参定义切点

切点表达式中方法入参部分比较复杂,可以使用“”和“..”通配符,其中“”表示任意类型的参数,而“..”表示任意类型参数且参数个数不限。

joke(String, *)

匹配目标类中joke()方法,该方法第一个入参为String类型,第二个入参可以是任意类型

execution(* joke(String, int))

匹配类中的joke()方法,且第一个入参为String类型,第二个入参 为int类型

execution(* joke(String, ..))

匹配目标类中joke()方法,该方法第一个入参为String,后面可以有任意个且类型不限的参数

常见的切点表达式

匹配方法签名

// 匹配指定包中的所有方法

execution(* com.xys.service.*(..))

// 匹配当前包中的所有public方法

execution(public * UserService.*(..))

// 匹配指定包中的所有public方法,并且返回值是int类型的方法

execution(public int com.xys.service.*(..))

// 匹配指定包中的所有public方法,并且第一个参数是String,返回值是int类型的方法

execution(public int com.xys.service.*(String name, ..))

匹配类型签名

// 匹配指定包中的所有方法,但不包括子包

within(com.xys.service.*)

// 匹配指定包中的 所有方法,包括子包

within(com.xys.service..*)

// 匹配当前包中的指定类中的方法

within(UserService)

// 匹配一个接口的所有实现类中的实现的方法

within(UserDao+)

匹配Bean名字

// 匹配以指定名字结尾的bean中的所有方法

bean(Service)

切点表达式组合

// 匹配以Service或ServiceImpl结尾的bean

bean(Service || *ServiceImpl)

// 匹配名字以Service结尾,并且在包com.xys.service中的Bean

bean(Service) && within(com.xys.service.)

java aop execution_Spring AOP -- execution表达式相关推荐

  1. Spring AOP切入点@Pointcut -- execution表达式

    Spring AOP 切入点@Pointcut – execution表达式 表达式示例 execution(* com.sample.service.impl..*.*(..)) 详述: execu ...

  2. java args例子_Spring AOP中使用args表达式的方法示例

    本文实例讲述了Spring AOP中使用args表达式的方法.分享给大家供大家参考,具体如下: 一 配置 xmlns:xsi="http://www.w3.org/2001/XMLSchem ...

  3. 白话Spring(基础篇)---AOP(execution表达式)

    [一知半解,就是给自己挖坑] 作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! ----------------- ...

  4. aop中execution 表达式

                                                         execution 表达式 学习Spring中的aop组装切面时遇到的execution表达式 ...

  5. springboot aop的execution 表达式详解

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  6. Spring AOP -- execution表达式

    *:匹配任何数量字符: ..:匹配任何数量字符的重复,如在类型模式中匹配任何数量子包:而在方法参数模式中匹配任何数量参数. +:匹配指定类型的子类型:仅能作为后缀放在类型模式后边. 表达式示例 exe ...

  7. 推荐学java——Spring之AOP

    tips:本文首发在公众号逆锋起笔 ,本文源代码在公众号回复aop 即可查看. 什么是AOP? AOP (Aspect Orient Programming),直译过来就是 面向切面编程.AOP 是一 ...

  8. Spring AOP中@Pointcut切入点表达式详解

    目录 一.瞅一眼标准的AspectJ Aop的pointcut的表达式 二.SpringAop的十一种AOP表达式 三.演示使用 1.execution: 2.within: 3.this: 4.ta ...

  9. Java之Spring5:AOP

    AOP面向切面编程 介绍 底层原理 有接口情况,使用JDK动态代理 JDK动态代理具体实现 没有接口情况,使用CGLIB动态代理 AOP的几个术语 基于AspectJ实现注解方式的AOP操作 准备 实 ...

最新文章

  1. HDU 3333-Turing Tree(线段树解决离线询问)
  2. jquery 移除border_jQuery - 删除元素
  3. python蜡烛图预测_python tushare股票K线蜡烛图绘制
  4. 09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记)
  5. dart系列之:创建Library package
  6. MediatR 知多少
  7. hibernate正向生成数据库表以及配置——hibernate.cfg.xml
  8. 日常的SQL 语句使用
  9. 模式识别实验报告--贝叶斯分类器设计
  10. 汽车振动响应分析-机械阻抗法(含机械网络图,附程序)
  11. viewStub 延迟布局加载
  12. 西门子plc 用c语言编程,西门子PLC常用指令举例
  13. java sqlldr_sqlldr详解
  14. Elasticsearch第二篇:es之间版本比较
  15. shiro 自定义FormAuthenticationFilter,记住我
  16. PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  17. nginx方向代理域名访问
  18. 什么是Saas架构?
  19. 静态变量和静态方法编程训练—信用卡消费记录
  20. Mac 上简体中文输入方式的键盘快捷键

热门文章

  1. 程序员修神之路--kubernetes是微服务发展的必然产物
  2. Grpc Proto To Nuget Package 插件使用说明
  3. HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比
  4. Visual Studio 2017 15.9 版本发布:推出全新的导入 / 导出配置功能
  5. 用HttpClientFactory来实现简单的熔断降级
  6. asp.net core合并压缩资源文件引发的学习之旅
  7. Visual Studio2017 远程调试 Remote Debugger
  8. .NET Core 2将Visual Basic带到了Linux和macOS平台
  9. win10系统按esc会弹出计算机,win10系统版本2004控制面板多出ESC是什么原因?
  10. 流程展示 php,js实现动态的流程进度展示条