Spring EL表达式::

1、execution 表达式

  语法格式: execution(返回类型.包名.类名.方法名(参数表))

  exection(*.com.xxx.AService.*(..))

  com.xxx.AService 类型中的任意方法,任意类型返回结果,参数表不限定,都增加切面

  应用:最常用。也是相对最通用。根据方法执行的标准,定义切点 如 事务  日志

  1. <aop:config>
      <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(..))" id="mypoint"/>
    </aop:config>

2、target 表达式

  以目标对象作为切点的表达式定义方式 (用于某一个接口or某一类接口)

  语法:target(包名.接口名)

  如:target(com.xx.IA)  所有实现了IA接口的实现类,作为代理的目标对象,会自动增加通知的织入,是实现切面

  应用:为某一个具体的接口实现提供的配置。如 登录的时候需要执行的附属逻辑是比较多的。在不同的业务流程中,附属逻辑也不同。如,电商中,可能在登录的时候需要去执行购物车合并

  1. <aop:config>
  2.   <aop:pointcut expression="target(com.bjsxt.aop.TestService)" id="mypoint"/>
  3. </aop:config>

3、this 表达式

  实现某接口的任意代理对象都作为切点

  语法:this(包名.接口名)

  如:this(com.xxx.IA)  代理对象 Proxy如果实现了IA接口,则作为连接点

  应用:针对某个具体的代理提供的配置。比target切点粒度细致。因为目标对象可以多实现。代理对象可以针对目标对象实现的多个接口的某一个接口,提供特定的切点。如,银行中的登录,银行中的账户种类非常多,且有交叉。如借记卡,贷记卡,借记还贷卡。。。。可以针对还贷接口提供一个切点,做还贷信息 的记录等。

  1. <aop:config>
  2.   <aop:pointcut expression="this(com.bjsxt.aop.TestService)" id="mypoint"/>
  3. </aop:config>

4、 within 表达式

  以包作为目标,定义切点

  语法: within(包名.*) 代表在包中的任意接口或类型都作为切点

  应用:针对某一个包提供的切点,粒度比target粗糙。如:某包中的所有接口都需要执行某附属逻辑。如 电商平台中的下订单。下订单服务中可能需要特定的逻辑(时间戳校验,库存检查等),这些逻辑,是其他业务线中不需要提供切面的

  1. <aop:config>
  2.   <aop:pointcut expression="within (com.bjsxt.aop.*)" id="mypoint"/>
  3. </aop:config>

5、args表达式

  以参数标准作为目标,定义切点

  语法: args(类型,类型.....) 代表方法的参数表符合要求的时候,作为切点,参数表是有顺序的

  应用:主要应用在参数校验中。如:登录的时候必须传递两个字符串参数(登录名和密码)。可以使用args来限定。配合这execution实现。如:execution(.*.xxx.*.login(..)) args(String,String)。是使用频率最低的表达式

  1. <aop:config>
  2.   <aop:pointcut expression="args (java.lang.String)" id="mypoint"/>
  3. </aop:config>

AOP (切点表达式讲解)的更多相关文章

  1. Spring AOP切点表达式用法总结

    1. 简介        面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模 ...

  2. AOP切点表达式

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  3. AspectJ风格的Aop切点表达式

    execution(*com.aptech.jb.epet.dao.hibimpl.*.*(..)) 这样写应该就可以了,这是com.aptech.jb.epet.dao.hibimpl 包下所有的类 ...

  4. 使用注解匹配Spring Aop切点表达式

    Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...

  5. Spring AOP 切点(pointcut)表达式

    这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可以抽像 ...

  6. SpringBoot AOP中JoinPoint的用法和通知切点表达式

    前言 上一篇文章讲解了springboot aop 初步完整的使用和整合 这一篇讲解他的接口方法和类 JoinPoint和ProceedingJoinPoint对象 JoinPoint对象封装了Spr ...

  7. Spring—切点表达式

    摘要: Spring中的AspectJ切点表达式函数 切点表达式函数就像我们的GPS导航软件.通过切点表达式函数,再配合通配符和逻辑运算符的灵活运用,我们能很好定位到我们需要织入增强的连接点上.经过上 ...

  8. springboot+aop切点记录请求和响应信息

    本篇主要分享的是springboot中结合aop方式来记录请求参数和响应的数据信息:这里主要讲解两种切入点方式,一种方法切入,一种注解切入:首先创建个springboot测试工程并通过maven添加如 ...

  9. aop execution 表达式解析

    execution(* com.sample.service.impl..*.*(..)) 解释如下: 符号 含义execution()表达式的主体:第一个”*“符号表示返回值的类型任意:com.sa ...

随机推荐

  1. 第二章 向量(b)可扩充向量

  2. RedHat 更新CentOS Yum源(转)

    经测试,可用.转自:https://www.cnblogs.com/tangsen/p/5151994.html 一.随笔引言 1.1随笔内容: 1.RedHat 配置Centos yum源 2.yu ...

  3. hadoop深入简出(二)

    1.上传文件 Hadoop fs -put hello.txt / 2.查看上传的文件 hadoop fs -ls / hadoop fs -text /hello.txt 两个命令都可以 3.创建文 ...

  4. c# tcp协议发送数据

    private void tcp_send(string data)//tcp协议转发数据 { TcpClient tcpClient = new TcpClient(); tcpClient.Con ...

  5. Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(二)

    Terrain Streaming 可以用WorldCreator创建Tile地形,然后用WorldStreamer实现分块地图.比如10000*10000(16平方公里) 的地形,需要1000*10 ...

  6. 100-days:nine

    Title: Boeing(波音飞机) crash isolates FAA as(伴随,随着) China leads push against Max(出事机型,即737 Max) crash n ...

  7. jquery is()和has()方法

    1. is() :判断当前节点是否是否匹配选择器.返回布尔值: 2. has():判断当前节点是否包含选择器中的子元素,返回包含固定子元素的父元素(jquery对象) 用法:可用于判断父元素中是否包含 ...

  8. [剑指Offer]52-两个链表的第一个公共节点

    题目链接 https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&t ...

  9. c#: List.Sort()实现稳固排序(stable sort)

    1. 源起: KV 7.0加入列表管理功能,处理排序问题时,对空列表执行按大小.日期.长度排序发现,其中次序会发生改变,令人纳闷. 没天理呀,不应该啊!List.Sort()方法,它为什么? 对此问题 ...

  10. jQuery 与js判断是否单选复选选中

    js判断复选:这段代码昨天网上查看的资料没保存出处,抱歉 var obj=document.getElementsByName("diseaseSet"); //选择所有name= ...