AOP (切点表达式讲解)
Spring EL表达式::
1、execution 表达式
语法格式: execution(返回类型.包名.类名.方法名(参数表))
exection(*.com.xxx.AService.*(..))
com.xxx.AService 类型中的任意方法,任意类型返回结果,参数表不限定,都增加切面
应用:最常用。也是相对最通用。根据方法执行的标准,定义切点 如 事务 日志
<aop:config>
<aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(..))" id="mypoint"/>
</aop:config>
2、target 表达式
以目标对象作为切点的表达式定义方式 (用于某一个接口or某一类接口)
语法:target(包名.接口名)
如:target(com.xx.IA) 所有实现了IA接口的实现类,作为代理的目标对象,会自动增加通知的织入,是实现切面
应用:为某一个具体的接口实现提供的配置。如 登录的时候需要执行的附属逻辑是比较多的。在不同的业务流程中,附属逻辑也不同。如,电商中,可能在登录的时候需要去执行购物车合并
<aop:config>
<aop:pointcut expression="target(com.bjsxt.aop.TestService)" id="mypoint"/>
</aop:config>
3、this 表达式
实现某接口的任意代理对象都作为切点
语法:this(包名.接口名)
如:this(com.xxx.IA) 代理对象 Proxy如果实现了IA接口,则作为连接点
应用:针对某个具体的代理提供的配置。比target切点粒度细致。因为目标对象可以多实现。代理对象可以针对目标对象实现的多个接口的某一个接口,提供特定的切点。如,银行中的登录,银行中的账户种类非常多,且有交叉。如借记卡,贷记卡,借记还贷卡。。。。可以针对还贷接口提供一个切点,做还贷信息 的记录等。
<aop:config>
<aop:pointcut expression="this(com.bjsxt.aop.TestService)" id="mypoint"/>
</aop:config>
4、 within 表达式
以包作为目标,定义切点
语法: within(包名.*) 代表在包中的任意接口或类型都作为切点
应用:针对某一个包提供的切点,粒度比target粗糙。如:某包中的所有接口都需要执行某附属逻辑。如 电商平台中的下订单。下订单服务中可能需要特定的逻辑(时间戳校验,库存检查等),这些逻辑,是其他业务线中不需要提供切面的
<aop:config>
<aop:pointcut expression="within (com.bjsxt.aop.*)" id="mypoint"/>
</aop:config>
5、args表达式
以参数标准作为目标,定义切点
语法: args(类型,类型.....) 代表方法的参数表符合要求的时候,作为切点,参数表是有顺序的
应用:主要应用在参数校验中。如:登录的时候必须传递两个字符串参数(登录名和密码)。可以使用args来限定。配合这execution实现。如:execution(.*.xxx.*.login(..)) args(String,String)。是使用频率最低的表达式
<aop:config>
<aop:pointcut expression="args (java.lang.String)" id="mypoint"/>
</aop:config>
AOP (切点表达式讲解)的更多相关文章
- Spring AOP切点表达式用法总结
1. 简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模 ...
- AOP切点表达式
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execu ...
- AspectJ风格的Aop切点表达式
execution(*com.aptech.jb.epet.dao.hibimpl.*.*(..)) 这样写应该就可以了,这是com.aptech.jb.epet.dao.hibimpl 包下所有的类 ...
- 使用注解匹配Spring Aop切点表达式
Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...
- Spring AOP 切点(pointcut)表达式
这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可以抽像 ...
- SpringBoot AOP中JoinPoint的用法和通知切点表达式
前言 上一篇文章讲解了springboot aop 初步完整的使用和整合 这一篇讲解他的接口方法和类 JoinPoint和ProceedingJoinPoint对象 JoinPoint对象封装了Spr ...
- Spring—切点表达式
摘要: Spring中的AspectJ切点表达式函数 切点表达式函数就像我们的GPS导航软件.通过切点表达式函数,再配合通配符和逻辑运算符的灵活运用,我们能很好定位到我们需要织入增强的连接点上.经过上 ...
- springboot+aop切点记录请求和响应信息
本篇主要分享的是springboot中结合aop方式来记录请求参数和响应的数据信息:这里主要讲解两种切入点方式,一种方法切入,一种注解切入:首先创建个springboot测试工程并通过maven添加如 ...
- aop execution 表达式解析
execution(* com.sample.service.impl..*.*(..)) 解释如下: 符号 含义execution()表达式的主体:第一个”*“符号表示返回值的类型任意:com.sa ...
随机推荐
- python 自动补全
一.查看python 环境变量 >>> import sys>>> sys.path 编写 tab.py import sys import atexit impo ...
- Shell教程 之字符串
1.Shell字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号. 1.1 单引号 str='I am ...
- privilege instruction error
检查新建的回调函数是否用了__stdcall修饰
- POI依据类型设置导出格式
//设置Bigdecimal数据导出时以数值形式输出 CellStyle decimalStyle = workbook.createCellStyle(); DataFormat decimalDf ...
- 在微信小程序中调用本地接口
1.点击详情,并勾选项目设置中最后一行. 2.用小程序请求本地的后台服务接口 wx.request({ url: 'http://localhost:8090/DemoProject/myTest.d ...
- iOS 集成极光推送
最近极光推送更新到V3版本之后,推送又不成功!配合服务器联调了半天,发现是服务器环境配置有问题. 想着就把极光推送的步骤给记录下来. 一.配置push证书 这个可以到极光文档里写,很详细 二.导入必要 ...
- (四)创建ROS程序包(就是软件包)
你的 ROS 程序包都放到下面这个目录里, 切换到这个目录: $ cd ~/catkin_ws/src 使用下面的命令: 创建一个 ROS 程序包 名字就叫:beginner_tutorials $ ...
- Aspose.words一 DOM结构
2.文档对象模型概述 2.1 DOM介绍 Aspose.Words的文档对象模型(以下简称DOM)是一个Word文档在内存中的映射,Aspose.Words的DOM可以编程读取.操作和修改Word文档 ...
- BCHABC/BCHSV的矛盾所在
BCHABC: 将BCH以后发展智能合约: 消息方面: 吴忌寒:BCH分叉不可避免 未来可能继续分叉 近日,吴忌寒在北大光华管理学院的区块链培训课程上发表演讲表示,在这种言论自由地环境下,我认为分裂就 ...
- springBoot整合Quarzt2.3
首先,你要配置好springboot的配置(在resources下) 我把其改为application.yml # Tomcat server: tomcat: uri-encoding: UTF-8 ...