Spring Boot - AOP(面向切面)-切入点表达式
切入点指示符用来指示切入点表达式目的,在 Spring AOP 中目前只有执行方法这一个连接点,Spring AOP 支持的 AspectJ 切入点指示符,切入点表达式可以使用 &&、||、!来组合切入点表达式,还可以使用类型匹配的通配符来进行匹配,类型通配符如下:
|
类型匹配通配符 |
说明 |
|
* |
表示匹配任何数量字符。示例:java.*.String,表示匹配 java 包下的任何"一级子包"下的 String 类型; 如匹配 java.lang.String,但不匹配java.lang.ss.String |
|
.. |
表示任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。示例:java..* ,表示匹配java包及任何子包下的任何类型; 如匹配java.lang.String、java.lang.annotation.Annotation |
|
+ |
仅能作为后缀放在类型模式后边,匹配指定类型的子类型; |
详细说明如下:
- execution:用于匹配方法执行的连接点,配置切入点示例 @Pointcut("execution(切入点表达式)"),切入点表达式格式如下:execution(annotation? modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
|
切入点表达式示例 |
说明 |
|
public * *(..) |
任何公共方法的 |
|
@org.lixue.EnableLogTrace public * *(..) |
使用 org.lixue.EnableLogTrace 注解标注的任何公共方法 |
|
* org.lixue..LogTrace+.*() |
org.lixue 包及所有子包下 LogTrace接口及子类型的的任何无参方法 |
- within:用于匹配指定类型内的方法执行;配置切入点示例 @Pointcut("within(切入点表达式)")
|
切入点表达式示例 |
说明 |
|
org.lixue..* |
在 org.lixue 包或所有子包的任何方法执行 |
|
org.lixue..AccountService |
在 org.lixue 包或所有子包下 AccountService 类型的任何方法 |
|
org.lixue..LogTrace+ |
在 org.lixue 包或所有子包下 LogTrace 类型及子类型的任何方法 |
- this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;注意this中使用的表达式必须是类型全限定名,不支持通配符。配置切入点示例:@Pointcut("this(org.lixue.LogTrace)")
|
切入点表达式示例 |
说明 |
|
org.lixue.LogTrace |
AOP代理对象的类型实现了 org.lixue.LogTrace 接口的任何方法 |
- target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是类型全限定名,不支持通配符;配置切入点示例:@Pointcut("target(org.lixue.LogTrace)")
|
切入点表达式示例 |
说明 |
|
org.lixue.LogTrace |
实现了 org.lixue.LogTrace 接口的任何方法 |
- args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;参数类型列表中的参数必须是类型全限定名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用;注意:匹配传入的参数类型,不是匹配方法签名的参数类型。,配置切入点示例@Pointcut("args(java.lang.String,java.lang.String)")
|
切入点表达式示例 |
说明 |
|
args (java.io.Serializable,..) |
任何一个以接受"传入参数类型为 java.io.Serializable" 开头,且其后可跟任意个任意类型的参数的方法执行 |
|
args(java.lang.String,java.lang.String) |
任何一个以接受传入两个参数并且类型为 java.lang.String |
- @within:用于匹配所以持有指定注解类型内的方法;配置切入点示例 @Pointcut("@within(注解类型)"),注解类型也必须是全限定类型名
|
切入点表达式示例 |
说明 |
|
org.lixue.EnableLogTrace |
使用 org.lixue.EnableLogTrace 注解的任何类型的任何方法必须是在目标对象上声明这个注解,在接口上声明的对它不起作用 |
- @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;配置切入点示例@Pointcut("@target(注解类型)"),注解类型也必须是全限定类型名
|
切入点表达式示例 |
说明 |
|
org.lixue.EnableLogTrace |
使用 org.lixue.EnableLogTrace 注解的任何类型的任何方法必须是在目标对象上声明这个注解,在接口上声明的对它不起作用 |
- @args:用于匹配当前执行的方法传入的参数持有指定注解的执行;
|
切入点表达式示例 |
说明 |
|
org.lixue.EnableLogTrace |
使用 org.lixue.EnableLogTrace 注解的任何类型的任何方法必须是在目标对象上声明这个注解,在接口上声明的对它不起作用 |
- @annotation:用于匹配当前执行方法持有指定注解的方法,配置切入点示例 @Pointcut("@annotation(注解类型)"),注解类型也必须是全限定类型名
|
切入点表达式示例 |
说明 |
|
org.lixue.EnableLogTrace |
使用 org.lixue.EnableLogTrace 注解的任何方法 |
Spring Boot - AOP(面向切面)-切入点表达式的更多相关文章
- spring总结————AOP面向切面总结
spring总结————AOP面向切面 一.spring aop概念 spring aop面向切面编程,java是面向对象的语言. 真正的service层代码 业务逻辑层再处理业务之前和之后都要进行一 ...
- Spring:AOP面向切面编程
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...
- Spring 08: AOP面向切面编程 + 手写AOP框架
核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...
- Spring的AOP面向切面编程
什么是AOP? 1.AOP概念介绍 所谓AOP,即Aspect orientied program,就是面向方面(切面)的编程. 功能: 让关注点代码与业务代码分离! 关注点: 重复代码就叫做关注点: ...
- spring:AOP面向切面编程02
参考: https://blog.csdn.net/jeffleo/article/details/54136904 一.AOP的核心概念AOP(Aspect Oriented Programming ...
- Spring注解 - AOP 面向切面编程
基本概念: AOP:Aspect Oriented Programming,即面向切面编程 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 前置通知(@Before):在目标 ...
- Spring框架——AOP面向切面编程
简介 AOP练习 使用动态代理解决问题 Spring AOP 用AspectJ注解声明切面 前置后置通知 利用方法签名编写AspectJ切入点表达式 指定切面的优先级 基于XML的配置声明切面 Spr ...
- Spring框架 AOP面向切面编程(转)
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- 【spring源码学习】spring的AOP面向切面编程的实现解析
一:Advice(通知)(1)定义在连接点做什么,为切面增强提供织入接口.在spring aop中主要描述围绕方法调用而注入的切面行为.(2)spring定义了几个时刻织入增强行为的接口 => ...
- Spring之AOP(面向切面编程)_入门Demo
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可 ...
随机推荐
- Navicat连接Mysql报错:Client does not support authentication protocol requested by server;
Navicat连接Mysql报错:Client does not support authentication protocol requested by server: 刚安装Mysql,想用Nav ...
- 马凯军201771010116《面向对象与程序设计Java》第十七周学习总结
一.理论知识部分 Java 的线程调度采用优先级策略:优先级高的先执行,优先级低的后执行:多线程系统会自动为每个线程分配一个优先级,缺省时,继承其父类的优先级: 任务紧急的线程,其优先级较高: 同优先 ...
- Firefox下载附件乱码的解决办法
通过在http的header里设置fileName下载附件时,中文文件名通过chrome浏览器下载时正常,通过firefox下载时为乱码: 原来的Java代码: response.addHeader( ...
- html 使表格随着内容自动适应宽度
所谓难而不会,会儿不难.这个问题让我纠结了很长时间,一句css解决了,仅仅靠一个属性 td { white-space: nowrap; } from:http://blog.csdn.net/liu ...
- css解决多行溢出显示省略号
多行溢出 仅作为记录方便查找 display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: number; /*n行溢 ...
- linux下jvm优化、tomcat调优
系统环境:jdk1.8,apache-tomcat-8.5.35 一.jvm优化 进入 bin/catalina.sh,修改JAVA_OPTS配置: JAVA_OPTS="-server - ...
- calc()
什么是calc()? 学习calc()之前,我们有必要先知道calc()是什么?只有知道了他是个什么东东?在实际运用中更好的使用他. calc()从字面我们可以把他理解为一个函数function.其实 ...
- 停止node进程和查看react-native-cli
taskkill /f /t /im node.exe which react-native
- 小程序之--canvasToTempFilePath
最近做的小程序需要图片上传头像的功能,不对上传的图片做处理肯定出来的效果不好:所以就隐藏了一个canvas对上传的图片进行压缩或者进行大小的编辑: 通过chooseImage方法,可以拿到图片的临时路 ...
- UI中的Rect Transform
RectTransform 是 Transform 的 2D 对应 Component. Transform 表示单个点,Rect Transform 表示一个2D矩形(UI空间),如果父子物体都有R ...