常见问题之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新增的