常见问题之Java——AOP中常用的切入点表达式

2022-01-11 14:45:02 浏览数 (1)

常见问题之Java——AOP中常用的切入点表达式

背景

日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。

同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。

开发环境

  • 系统:windows10
  • JDK:openjdk11
  • 开发工具:IDEA 教育版
  • 框架:SpringBoot
  • 包管理:Gradle

内容

上一篇,我们提到了AOP的基础概念(知识分享之Java——AOP中执行顺序),这一篇我们整理一下常用的切入点表达式。

关键词:execution 用于匹配子表达式

格式 @注解("execution(可见性返回类型声明类型.方法名(参数)异常")

这其中常用注解包括以下几种:

@Aspect、@Component、@Pointcut、@Before、@AfterReturning

而表达式的格式构成主要有以下这些:

    • 这个符号表示匹配所有的。
    • 这个表示类和子类
  • ... 这个表示多个包,比如core包下面的所有:com.demo.core...
  • && 这个表示并且
  • || 这个表示或者
  • ! 这个表示非 例如常见的表达式有: execution(* com.demo.core.controller.indexController.index(..)) 表示com.demo.core.controller包下的indexController类中的index方法生效,*表示里面不管任何返回值的均包括。

而execution这个关键词其实也有很多种

  • execution 如上,根据表达式进行匹配
  • within 用于匹配连接点所在的Java类或包
  • this 用于匹配通知方法中传入代理对象的引用
  • target 用于向通知方法中传入目标对象的引用
  • args 用于将参数传入到通知方法中
  • @within 用于匹配在类一级使用了参数确定的注解的类,其所有方法都将被匹配
  • @target 和@within的功能类似,但必须要指定注解接口的保留策略为RUNTIME。
  • @args 传入连接点的对象对应的Java类必须被@args指定的Annotation注解标注。
  • @annotation 匹配连接点被它参数指定的Annotation注解的方法。也就是说,所有被指定注解标注的方法都将匹配。
  • bean 通过受管Bean的名字来限定连接点所在的Bean。该关键词是Spring2.5新增的

0 人点赞