切入点的表达式


execution(void cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:无返回类型,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

表达式的写法

execution(modifiers-pattern? (非必填项)--<访问修饰符>?ret-type-pattern (必填项)--<返回类型>declaring-type-pattern? (非必填项)name-pattern(param-pattern)(必填项)--<方法名>(<参数>)throws-pattern?(非必填项)<异常>?)

一共有5个参数
其中的?表示非必填项

文档中写的:
除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外, 所有的部分都是可选的。
返回类型模式决定了方法的返回类型必须依次匹配一个连接点。 你会使用的最频繁的返回类型模式是*,它代表了匹配任意的返回类型。
一个全限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用*通配符作为所有或者部分命名模式。
参数模式稍微有点复杂:()匹配了一个不接受任何参数的方法, 而(..)匹配了一个接受任意数量参数的方法(零或者更多)。
模式()匹配了一个接受一个任何类型的参数的方法。 模式(,String)匹配了一个接受两个参数的方法,第一个可以是任意类型, 第二个则必须是String类型。更多的信息请参阅AspectJ编程指南中 语言语义的部分。

1:modifiers-pattern? (非必填项):表示方法的修饰符


execution(public void cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:共有方法,无返回类型,cn.itcast.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(private void cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:私有方法,无返回类型,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

2:ret-type-pattern (必填项):表示方法的返回类型


execution(void cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:无返回类型,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(java.lang.String cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:返回类型String类型,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示:返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

3:declaring-type-pattern? (非必填项):表示包,或者子包的,或者类的修饰符


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring.*.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring包中的所有子包,包中UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring.*.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring包中的所有类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring..*.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring包中及其子包中的所有类,类中的saveUser方法,参数2个,都是String类型


execution(* *.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,所有包中的所有类,类中的saveUser方法,参数2个,都是String类型


execution(* saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,所有包中的所有类,类中的saveUser方法,参数2个,都是String类型

4:name-pattern(param-pattern)(必填项):方法的名称(方法的参数)

(1)方法名称


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring.demo.UserServiceImpl.save*(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的以save开头的方法,参数2个,都是String类型


execution(* cn.cdut.spring.demo.UserServiceImpl.*(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的所有方法,参数2个,都是String类型

    (2)方法的参数(必填项)


execution(* cn.itcast.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.String))

  • 表示返回类型任意,cn.itcast.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,java.lang.Integer))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,参数1是String类型,参数二是Integer


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(java.lang.String,*))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数2个,参数1是String类型,参数二是任意类型


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(*))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数1个,参数是任意类型


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser())

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,没有参数


execution(* cn.cdut.spring.demo.UserServiceImpl.saveUser(..))

  • 表示返回类型任意,cn.cdut.spring.demo包中的UserServiceImpl类,类中的saveUser方法,参数任意(可以是0个,也可以多个)

5:throws-pattern?(非必填项):方法上抛出的异常

项目开发中表达式(最多用)

1:execution(* cn.cdut.procject.service..*.*(..))
* 返回类型任意,cn.itcast.procject.service包及其子包中所有类,类中所有方法,参数任意
2:execution(* *..*.*(..))
* 返回类型任意,任意包中及其子包中所有类,类中所有方法,参数任意
3:execution(* *(..))
* 返回类型任意,任意包中及其子包中所有类,类中所有方法,参数任意

下面给出一些通用切入点表达式的例子

任意公共方法的执行:


execution(public * *(..))

任何一个名字以“set”开始的方法的执行:


execution(* set*(..))

AccountService接口定义的任意方法的执行:


execution(* com.xyz.service.AccountService.*(..))

在service包中定义的任意方法的执行:


execution(* com.xyz.service.*.*(..))

在service包或其子包中定义的任意方法的执行:


execution(* com.xyz.service..*.*(..))

切入点表达式的语法整理如下:

execution(<访问修饰符>?<返回类型>空格<方法名>(<参数>)<异常>?)
例如:
execution(* cn.cdut.spring.a_jdkproxy.CustomerServiceImpl.*(..))
增强bean对象所有方法
execution(* cn.cdut.spring..*.*(..))
增强spring包和子包所有bean所有方法
提示:最灵活的
bean(bean Id/bean name)
例如
bean(customerService)
增强spring容器中定义id属性/name属性为customerService的bean中所有方法 bean(*Service)
:pring容器中的bean,对应bean中的id属性,*Service表示找到所有以Service结尾的id的名称
within(包.类)
例如:
within(cn.cdut.spring..*)
增强spring包和子包所有bean“所有方法 ”
this(完整类型)/target(完整类型)
范围最小,只针对某个类型。
this对某一个类-(对代理对象有效),target对代理对象无效(只对目标对象有效)
例如:


this(cn.cdut.spring.demo.CustomerServiceImpl)

增强类型所有方法(对代理对象有效)
增强类型所有方法(对目标对象有效)
注意:我们一般都对目标对象进行拦截,很少对代理对象进行拦截

【AspectJ类型匹配的通配符】
*:匹配任何数量字符(一个);
..:匹配任何数量字符的重复(多个),如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。

Spring中的切入点表达式写法相关推荐

  1. Spring之AOP 切入点表达式写法

    切入点表达式的写法: 关键字:execution(表达式)表达式: 访问修饰符 返回值 包名.包名.包名-类名.方法名(参数列表)标准的表达式写法:public void com.example.se ...

  2. Spring 中的切点表达式介绍

    Spring 中的切点表达式介绍 翻译原文链接 Introduction to Pointcut Expressions in Spring 1. 概述 在本教程中,我们将讨论 Spring AOP ...

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

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

  4. spring中的spel表达式语言

    spring in action第三版读书笔记 spring3.0引入了spring expression language(spel)语言,通过spel我们可以实现 1.通过bean的id对bean ...

  5. Spring框架----通用切入点表达式

    配置切面 配置切入点表达式,id用于指定表达式的唯一标识,expression用于指定表达式内容 此标签写在aop-aspect标签内部,只能当前切面使用,如果有新的切面,只能重新配置 它还可以写在a ...

  6. Aop 切入点表达式

    Spring中通过切入点表达式定义具体切入点,其常用AOP切入点表达式定义及说明: 表-1 Spring AOP 中切入点表达式说明 指示符 作用 bean 用于匹配指定bean对象的所有方法 wit ...

  7. 切入点和切入点表达式(AOP面向切面编程)

    https://blog.csdn.net/keda8997110/article/details/50747923/ AOP面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的技术. ...

  8. Spring 中的Advice类型介绍

    Spring 中的 Advice 类型介绍 翻译原文链接 Introduction to Advice Types in Spring 1. 概述 在本文中,我们将讨论可以在 Spring 中创建的不 ...

  9. Spring切入点表达式常用写法

    Spring切入点表达式常用写法 自从使用AspectJ风格切面配置,使得Spring的切面配置大大简化,但是AspectJ是另外一个开源项目,其规则表达式的语法也稍稍有些怪异. 下面给出一些常见示例 ...

最新文章

  1. 2017回顾与2018前瞻:机器学习与人工智能
  2. Windows 8失败的5个原因
  3. Martix工作室考核题 —— 2019-3-8 第三题
  4. C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
  5. 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
  6. jdk 安全属性_系统属性的JDK 12 Javadoc标记
  7. python特殊函数__str__、__repr__和__len__
  8. Linux 使用 jstat 命令查看 jvm 的 GC 情况
  9. 软件工程复习笔记 UML
  10. 【模型加速】TensorRT详解
  11. nginx 报错 upstream timed out (110: Connection timed out)解决方案
  12. Django MTV - 模型层 - (专题)知识要点与实战案例
  13. C++之关键字:override
  14. 虚拟模拟器可以用服务器,云服务器可以用什么模拟器
  15. 手机使用linux教程,通过手机访问Linux电脑的教程
  16. 单片机系统不稳定情况
  17. Android第三方库收藏汇总
  18. C语言:实验11-1-2 输出月份英文名.2021-08-06
  19. Win2008下IIS7不显验证码解决方案
  20. linux网络编程--Web Server and HTTP

热门文章

  1. iOS15只是一个更好看的Linux吗?
  2. 台式计算机usb口接触不良,台式机usb接口不好怎么办
  3. java apk签名证书_Android签名证书的生成
  4. Please disable your ad blocker to download
  5. 使用系统打印服务器配置,打印服务器配置教程.pdf
  6. 使用宝塔搭建环境,以及把自己本地的Web项目通过宝塔发布到远程云服务器上
  7. [BZOJ1922]大陆争霸-最短路略微扩展
  8. 纯css实现div背景色从左到右的刷动效果
  9. 计算机不能读手机内存不足,手机装内存卡只读不写手机64G内存卡32G,64用完显示还剩32G但警告空间不足...
  10. 基准测试spec cpu2006