1.我们看看其他博文在此的解释及举例:

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

解释如下:

符号                                  含义

execution()                  表达式的主体;

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

com.sample.service.impl       AOP所切的服务的包名,即,我们的业务部分
包名后面的”..“         表示当前包及子包
第二个”*“           表示类名,*即所有类。此处可以自定义,下文有举例
.*(..)             表示任何方法名,括号表示参数,两个点表示任何参数类型

AspectJ中的exection表达式小结:
基本语法格式为:

execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)  除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。

下面,我们给出各种使用execution()函数实例。

1)通过方法签名定义切点

execution(public * *(..))

匹配所有目标类的public方法,但不匹配SmartSeller和protected voidshowGoods()方法。第一个*代表返回类型,第二个*代表方法名,而..代表任意入参的方法;

execution(* *To(..))l

匹配目标类所有以To为后缀的方法。它匹配NaiveWaiter和NaughtyWaiter的greetTo()和serveTo()方法。第一个*代表返回类型,而*To代表任意以To为后缀的方法;

2)通过类定义切点

execution(*com.baobaotao.Waiter.*(..))l

匹配Waiter接口的所有方法,它匹配NaiveWaiter和NaughtyWaiter类的greetTo()和serveTo()方法。第一个*代表返回任意类型,com.baobaotao.Waiter.*代表Waiter接口中的所有方法;

execution(*com.baobaotao.Waiter+.*(..))l

匹配Waiter接口及其所有实现类的方法,它不但匹配NaiveWaiter和NaughtyWaiter类的greetTo()和serveTo()这两个Waiter接口定义的方法,同时还匹配NaiveWaiter#smile()和NaughtyWaiter#joke()这两个不在Waiter接口中定义的方法。

3)通过类包定义切点

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

execution(* com.baobaotao.*(..))l

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

execution(* com.baobaotao..*(..))l

匹配com.baobaotao包、子孙包下所有类的所有方法,如com.baobaotao.dao,com.baobaotao.servier以及com.baobaotao.dao.user包下的所有类的所有方法都匹配。“..”出现在类名中时,后面必须跟“*”,表示包、子孙包下的所有类;

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

匹配包名前缀为com的任何包下类名后缀为Dao的方法,方法名必须以find为前缀。如com.baobaotao.UserDao#findByUserId()、com.baobaotao.dao.ForumDao#findById()的方法都匹配切点。

4)通过方法入参定义切点

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

execution(* joke(String,int)))l

匹配joke(String,int)方法,且joke()方法的第一个入参是String,第二个入参是int。它匹配NaughtyWaiter#joke(String,int)方法。如果方法中的入参类型是java.lang包下的类,可以直接使用类名,否则必须使用全限定类名,如joke(java.util.List,int);

execution(* joke(String,*)))l

匹配目标类中的joke()方法,该方法第一个入参为String,第二个入参可以是任意类型,如joke(Strings1,String s2)和joke(String s1,double d2)都匹配,但joke(String s1,doubled2,String s3)则不匹配;

execution(* joke(String,..)))l

匹配目标类中的joke()方法,该方法第 一个入参为String,后面可以有任意个入参且入参类型不限,如joke(Strings1)、joke(String s1,String s2)和joke(String s1,double d2,Strings3)都匹配。

execution(* joke(Object+)))

匹 配目标类中的joke()方法,方法拥有一个入参,且入参是Object类型或该类的子类。它匹配joke(Strings1)和joke(Client c)。如果我们定义的切点是execution(*joke(Object)),则只匹配joke(Object object)而不匹配joke(Stringcc)或joke(Client c)。

2.现在,我们看看官方文档对此的解释及举例

上面的表达式我们没有办法全部举例,还请有需求的各位读者,自行参考官方文档的解释,进行相关的配置

参考资料:

Spring官网:http://spring.io/docs

其他博文:
http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example

http://tonl.iteye.com/blog/1966075

Spring_AOP(execution表达式)相关推荐

  1. java aop execution_Spring AOP -- execution表达式

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

  2. spring AspectJ的Execution表达式

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

  3. Spring AspectJ Execution 表达式

    1. 定义切点表达式 execution(* com.xinsui.service.impl..*.*(..)) execution(* *..impl..*.*(..)) 切点表达式分为五个部分 1 ...

  4. AspectJ的Execution表达式

    AspectJ的Execution表达式 execution() execution()是最常用的切点函数,其语法如下所示: execution(<修饰符模式>? <返回类型模式&g ...

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

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

  6. Spring Aspect @PointCut(execution表达式)

    execution(* com.sample.service.impl..*.*(..)) 解释如下: 符号 含义 execution() 表达式的主体: 第一个"*"符号 表示返 ...

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

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

  8. Spring AOP -- execution表达式

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

  9. execution 表达式用法汇总

    1.切所有controller下的请求 项目结构 任意公共方法的执行: 1 execution(public * (-)) ##public可以省略, 第一个 代表方法的任意返回值 第二个参数代表任意 ...

  10. java execution_aop execution 表达式解析

    execution(* com.sample.service.impl..*.*(..)) 解释如下: 符号含义 execution() 表达式的主体: 第一个"*"符号 表示返回 ...

最新文章

  1. 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
  2. python错误找回_致命的Python错误:无法从堆栈溢出中恢复。洪水期间Fi
  3. 剑指offer4:重建二叉树
  4. Unieap3.5错误收集
  5. Linux_基础指令
  6. java纯粹面向对象_Java的面向对象特征
  7. 获取的官方例程后怎么开发_开发商败诉后拒不赔偿怎么办,房地产纠纷处理方式有哪些?...
  8. [leetcode] 144. 二叉树的前序遍历
  9. 4-Spring Boot 的视图
  10. 山东到底有没有互联网?
  11. OSG三维渲染引擎编程指南(详读)
  12. 支招功能最强人工智能围棋软件_AI智能棋盘全新上线,围棋的奥秘原来在这里?...
  13. 用计算机怎么汇款,工行批量转账工具怎么用,要详细的步骤。
  14. 程序员该如何释放压力
  15. 苹果计算机恢复计算器,苹果自带计算器删除怎么恢復
  16. java实现读取excel用例,testNg自动化,读取excel的数据
  17. Kotlin 笔记 纯属娱乐萌新大佬绕道
  18. vue动态面包屑导航的使用
  19. 安装 Ubuntu (乌班图)
  20. 对话硅谷高科技创业公司

热门文章

  1. 基于SSH开发service电子信箱(邮箱)管理系统
  2. 初创企业融资发展的几个阶段
  3. 移动端点击a标签后默认蓝色背景如何去除
  4. 成语答题赚小程序安装教程
  5. 计算机等级考试培训课件,计算机等级考试培训ppt课件
  6. ASIC芯片设计生产流程
  7. 京准通-全店海投出价方式介绍
  8. Mac下转换文件编码格式
  9. 谁说建模一定要会画图?参数化设计让你事半功倍!
  10. 苹果8参数_苹果12pro max 128G新起点预售价9099元-苹果 iPhone 12 Pro Max_西安手机行情...