写点什么

【Spring 学习笔记 (十二)】Spring AOP 切入点表达式

作者:倔强的牛角
  • 2022 年 6 月 17 日
  • 本文字数:951 字

    阅读完需:约 3 分钟

【Spring 学习笔记(十二)】Spring AOP 切入点表达式

写在前面😘

大一电子信息工程新生,请多多关照,希望能在 InfoQ 社区记录自己的学习历程!

【Spring 学习笔记】 系列教程基于 Spring 5.2.10.RELEASE讲解。

两个概念

  • 切入点:要进行增强的方法(被拦截的一个或多个连接点的集合)

  • 切入点表达式:要进行增强的方法的描述方式

一、切入点语法格式

切入点表达式标准格式:execution([修饰符] 返回值类型 类的全限定名.方法名(参数名)异常类型)


execution(public void com.bighorn.service.UserService.update(int))
复制代码


  • 注意: 修饰符和异常类型可以省略。

二、切入点通配符

使用通配符描述切入点,可以简化书写,使用一个注解就可以获取到多个目标对象,然后给这些目标对象添加通知。



  • 返回值类型*可以代表为任何返回值。如果返回值为对象,则需指定全路径的类名。

  • 方法名

  • *可以代表所有方法。

  • select*代表以 set 开头的所有方法:如 selectByName()、selectById()等等

  • 参数名

  • (..)代表任意参数(无参或多参都行);

  • (*)代表只有一个参数,参数类型为任意类型;

  • (*,*)代表有两个参数,且两个参数类型为任意类型;

  • (*,int)代表有两个参数,第一个参数可以为任何类型,第二个为 int 类型。


//指定切入点为项目中任意类的任意方法execution(* *..*(..))//指定切入点为com.bighorn包下的所有方法execution(* com.bighorn.*.*(..))//指定切入点为service层的所有方法execution(* com.bighorn.service.*.*(..))//指定切入点为service层的save开头的方法  execution(* com.bighorn.service.*.save*(..))//指定切入点为所有xxxService业务层接口的所有方法execution(* com.bighorn.*.*Service.*(..))//指定切入点为所有xxxService业务层接口的select开头的方法execution(* com.bighorn.*.*Service.select*(..))        
复制代码

三、切入点表达式编写技巧

  • 描述切入点通常描述接口,而不描述实现类,如果描述到实现类,就出现紧耦合了

  • 返回值类型对于增删改类使用精准类型加速匹配,对于查询类使用*通配快速描述

  • 包名书写尽量不使用..匹配,效率过低,常用*做单个包描述匹配,或精准匹配

  • 接口名/类名书写名称与模块相关的采用*匹配,例如 UserService 书写成*Service,绑定业务层接口名

  • 方法名书写以动词进行精准匹匹配,名词采用*匹配,例如 selectById 书写成 selectBy*

  • 通常不使用异常作为匹配规则

写在后面🍻

感谢观看啦✨

有什么不足,欢迎指出哦💖

用户头像

把学问造就,还期身健行优。 2022.06.02 加入

大一在读,电子信息工程专业。 希望在InfoQ写作社区记录自己的学习历程!

评论

发布
暂无评论
【Spring 学习笔记(十二)】Spring AOP 切入点表达式_Java_倔强的牛角_InfoQ写作社区