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可 ...
随机推荐
- echarts设置option中的数据对象优化
if(tab.name == 'first'){ myChart.setOption({ legend: { selected:{ [this.playNumber]:true, [this.cove ...
- ORACLE一个TNS配置错误
oracle tns配置文件格式如下 RSXT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.26.3. ...
- RabbitMQ中的RPC实现
1.RPC简述 RPC,Remote Procedure Call 远程过程调用.通俗讲,两段程序不在同一个内存空间,无法直接通过方法名调用,就需要通过网络通信方式调用.对于RabbitMQ,本身就是 ...
- 使用lua实现99乘法口诀表,就这么简洁
for i=1,9 do for j=1,i do io.write(j,"*",i,"=",i*j," ") end print() en ...
- Python 子进程不能input
from threading import Thread from multiprocessing import Process def f1(): name = input('请输入名字') #EO ...
- 如何生成SSH key及查看SSH key
只适用于Mac和windows下的Git Bash操作界面. 一.检查本地是否有SSH Key存在 在终端输入 ls -al ~/.ssh 如果终端输出的是: No such file or dire ...
- tomcat下服务启动失败原因
Tomcat启动成功,输入网址后可以显示小黄猫界面,但是在Tomcat下的服务却启动不成功,显示404(以Jenkins为例,运用多种方式查看原因) 注:1.单启动Tomcat服务是可以启动成功的. ...
- C语言 进制转换
这个程序仅仅是由十进制转换为其他进制的过程,其转换的规则如下图所示. 我使用的思路:首先在除基的过程中用一个数组保存余数,然后在输出进制转换结果的时候倒序输出,并且在输出前判断余数是否大于10,如果大 ...
- MHA(下)
一.配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...
- Spring MVC 上下文(ApplicationContext)初始化入口
Spring 常用上下文容器有哪些 ApplicationContext ClassPathXmlApplicationContext ApplicationContext context = new ...