面向切面的Spring通过切点来选择连接点实例详解

 更新时间:2023年10月23日 09:34:36   作者:胡杨  
这篇文章主要为大家介绍了面向切面的Spring通过切点来选择连接点实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

导读

与大多数技术一样,AOP已经形成了自己的术语。通知和切点是切面的最基本元素。

在Spring AOP中,要使用AspectJ的切点表达式语言来定义切点。

关于Spring AOP的AspectJ切点,最重要的一点就是Spring仅支持 AspectJ切点指示器 (pointcut designator ) 的一个子集。

图4.1

当我们查看如上所展示的这些Spring支持的指示器时,注意只有execution指示器是实际执行匹配的,而其他的指示器都是用来 限制匹配的。这说明execution指示器是我们在编写切点定义时最 主要使用的指示器。在此基础上,我们使用其他指示器来限制所匹配的切点。

编写切点

为了阐述Spring中的切面,我们需要有个主题来定义切面的切点。为 此,我们定义一个Performance接口:

package com.spring.point;

/**
 * @author huyang
 */
public interface Performance {
    public void perform();
}

Performance可以代表任何类型的现场表演,如舞台剧、电影或音 乐会。假设我们想编写Performance的perform ()方法触发的通 知。

图4.4展现了一个切点表达式,这个表达式能够设置当perform()方 法执行时触发通知的调用。

execution(*concert.Performance.perform(...))

小猿解释这个语句,即拦截目标方法执行切面规则。

图4.4

使用AspectJ切点表达式来选择Performance 的perform()方法

我们使用execution()指示器选择Performance的perform()方 法。

方法表达式以“*”号开始,表明了我们不关心方法返回值的类型。

然后,我们指定了全限定类名和方法名。

对于方法参数列表,我们使用两个点号 ( ..) 表明切点要选择任意的perform ()方法,无论该方法的入参是什么。

现在假设我们需要配置的切点仅匹配concert包。在此场景下,可 以使用within ()指示器来限制匹配,如图4.5所示。

图4.5

使用within()指示器限制切点范围

对图4.5所含的元素进行讲解:

在切点中选择bean

除了表4. 1所列的指示器外,Spring还引入了一个新的bean()指示 器,它允许我们在切点表达式中使用bean的ID来标识bean。bean ()

使用bean ID或bean名称作为参数来限制切点只匹配特定的bean。 例如,考虑如下的切点:

execution(* concert.Performance.perform()) and bean (*woodstock)

在这里,我们希望在执行Performance的perform()方法时应用通 知,但限定bean的ID为woodstock。

在某些场景下,限定切点为指定的bean或许很有意义,但我们还可以 使用非操作为除了特定ID以外的其他bean应用通知:

execution(* concert.Performance.perform()) and !bean (`woodstock`)

在此场景下,切面的通知会被编织到所有ID不为woodstock的bean 中。

现在,我们已经讲解了编写切点的基础知识,让我们再了解一下如何 编写通知和使用这些切点声明切面

以上就是面向切面的Spring通过切点来选择连接点实例详解的详细内容,更多关于Spring切点选择连接点的资料请关注脚本之家其它相关文章!

相关文章

  • Java中ResultSetMetaData 元数据的具体使用

    Java中ResultSetMetaData 元数据的具体使用

    本文主要介绍了Java中ResultSetMetaData 元数据的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java中输入单个char类型的字符方式

    Java中输入单个char类型的字符方式

    这篇文章主要介绍了Java中输入单个char类型的字符方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • MyBatis insert操作插入数据之后返回插入记录的id

    MyBatis insert操作插入数据之后返回插入记录的id

    今天小编就为大家分享一篇关于MyBatis插入数据之后返回插入记录的id,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SpringBoot根据各地区时间设置接口有效时间的实现方式

    SpringBoot根据各地区时间设置接口有效时间的实现方式

    这篇文章给大家介绍了SpringBoot根据各地区时间设置接口有效时间的实现方式,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Java利用JavaCPP调用算法示例

    Java利用JavaCPP调用算法示例

    本文主要介绍了Java利用JavaCPP调用算法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 解析Java异常的栈轨迹及其相关方法

    解析Java异常的栈轨迹及其相关方法

    这篇文章主要介绍了解析Java异常的栈轨迹及其相关方法,包括栈轨迹的打印和fillInStackTrace方法等,需要的朋友可以参考下
    2015-11-11
  • Java中jdk1.8和jdk17相互切换实战步骤

    Java中jdk1.8和jdk17相互切换实战步骤

    之前做Java项目时一直用的是jdk1.8,现在想下载另一个jdk版本17,并且在之后的使用中可以进行相互切换,下面这篇文章主要给大家介绍了关于Java中jdk1.8和jdk17相互切换的相关资料,需要的朋友可以参考下
    2023-05-05
  • idea启动项目报端口号冲突或被占用的解决方法

    idea启动项目报端口号冲突或被占用的解决方法

    这篇文章主要介绍了idea启动项目报端口号冲突或被占用的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Quartz高可用定时任务的快速上手指南

    Quartz高可用定时任务的快速上手指南

    Quartz的分布式策略就是一种以数据库作为边界资源的并发策略,每个节点都遵守相同的操作规范,使得对数据库的操作可以串行执行,而不同名称的调度器又可以互不影响的并行运行,下面这篇文章主要介绍了Quartz高可用定时任务快速上手的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java String字符串的常用使用方法

    Java String字符串的常用使用方法

    String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表示,本文给大家介绍Java String字符串的常用使用方法,感兴趣的朋友一起看看吧
    2025-04-04

最新评论