@Pointcut 使用

2023-10-29

作用

抽取通用逻辑。

使用

  1. 定义切入点;
  2. 选择合适的切入方法。
    范例(源自参考文章):注意代码中的注释
//@1:这个类需要使用@Aspect进行标注
@Aspect
public class Aspect1 {
 
    //@2:定义了一个切入点,可以匹配Service1中所有的方法
    @Pointcut("execution(* com.javacode2018.aop.demo9.test1.Service1.*(..))")
    public void pointcut1() {
    }
 
    //@3:定义了一个前置通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
    @Before(value = "pointcut1()")
    public void before(JoinPoint joinPoint) {
        //输出连接点的信息
        System.out.println("前置通知," + joinPoint);
    }
 
    //@4:定义了一个异常通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
    @AfterThrowing(value = "pointcut1()", throwing = "e")
    public void afterThrowing(JoinPoint joinPoint, Exception e) {
        //发生异常之后输出异常信息
        System.out.println(joinPoint + ",发生异常:" + e.getMessage());
    }
}

定义切入点

切入点,即能通过@PointCut中的模式字符串匹配到的方法。模式字符串有多种写法,可以分为类使用、方法使用、实例使用三类:

方法使用:

  • execution:用于匹配方法执行的连接点
  • args:用于匹配当前执行的方法传入的参数为指定类型的执行方法
  • @args:用于匹配当前执行的方法传入的参数是指定类型的
  • @annotation:用于匹配当前执行方法持有指定注解的方法
  • 切点引入,在切点定义类中对应方法上定义@PointCut,然后在@Aspect类中使用完整方法路径()引用,以分离切点定义和使用,方便切点集中管理

类使用:

  • within:用于匹配指定类内的方法执行
  • this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配
  • target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配
  • @within:用于匹配所以持有指定注解的类型内的方法
  • @target:用于配当前目标对象类型的执行方法,其中目标对象持有指定的注解

对象使用:

  • bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法

选择合适的切入方法

  • @Before:方法执行前执行
  • @Around:方法执行前后执行
  • @After:在连接点方法完成之后执行,无论连接点方法执行成功还是出现异常,都将执行后置方法
  • @AfterRunning:在方法成功执行返回结果之后执行
  • @AfterThrowing:在方法抛错之后执行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Pointcut 使用 的相关文章

随机推荐

  • 计算机论文参考文献最新年份,参考文献时间格式

    参考文献时间格式 论文的参考文献是在学术研究过程中 对某一著作或论文的整体的参考或借鉴 本篇是小编为大家收集整理的参考文献时间格式 喜欢的朋友不要错过啦 参考文献时间格式 1 期刊 序号 主要作者 文献题名 J 刊名 出版年份 卷号 期号
  • 计算机网络——绪论

    6个章节 外加实验和复习课时 题目来自于题库 重在理解 翻译 概述 物理层 链路层 网络层 传输层 应用层 复习课 实验课 一 计算机网络的基本概念 21 世纪的一些重要特征就是 数字化 网络化 和 信息化 是一个以网络为核心的信息时代 网
  • centos7下面php5.6添加postgresql相关扩展【试行】

    下载相关资源 首先 请下载PDO PGSQL及pq两个扩展包源码 PDO PGSQL pq 我下的是 请上传到centos服务器 上传完毕 解压及编译 解压后 分别编译扩展 编译pq扩展 步骤如下 注意 使用phpize的时候需要到扩展根目
  • void 可以避免编译警告

    下面这个函数被声明返回一个int类型 static int hns nic net stop struct net device ndev hns nic net down ndev return 0 如果在调用的时候不关心这个返回值的话
  • Linux 内核将用 Nftables 替代 iptables

    新的防火墙子系统 包过滤引擎 Nftables 将在 Linux 3 13 中替代有十多年历史的iptables iptables netfilter在2001年加入到2 4内核中 诞生于2008年的 NFTables 设计替代 iptab
  • Linux高级命令02 查看文件内容命令、链接命令

    Python Web篇学习汇总 Part 01 Linux基础命令 操作系统与虚拟机软件 了解Ubuntu操作系统 Linux查看 切换目录命令 绝对路径和相对路径 创建 删除 复制 移动文件及目录命令 ls命令选项 mkdir和rm命令选
  • SpringBoot入门了解

    第 1 章 Spring Boot入门 1 简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2 微服务 微服务 架构风格 服务微化 一个应用应该是一组小型服务 各司其职 那么对于负
  • edge浏览器证书错误NET::ERR_CERT_AUTHORITY_INVALID

    解决方案 使用fiddler后edge浏览器频繁证书报错 重置浏览器设置后正常
  • java根据word模板导出word文件

    1 word模板文件处理 如下图所示在word 文档中填值的地方写入占位变量 2 将word文档另存为xml文件 编辑如下图 找到填写的占位 修改为 bcrxm 格式 3 将文件后缀名改为 ftl文件 4 java处理过程 引入frameM
  • eigen 矩阵求逆_C++学习笔记——6. Eigen入门(矩阵运算及几何模块)

    本文介绍了C 中Eigen库的代数运算模块和几何模块 以程序实例演示了常见指令用法 Eigen是一个高层次开源C 库 有效支持线性代数 矩阵和矢量运算 数值分析及其相关算法 在SLAM或者VIO研究中 对Eigen库的使用可以说非常多 因此
  • opencv使用(一):安装 -- 基于python3.7

    目录 pip安装 源码安装 测试 pip安装 打开命令行工具cmd 直接安装 安装成功即可获得最新版opencv python pip install opencv python 也可以指定版本 例如 pip install opencv
  • 服务器Linux系统安装 制作CentOS 7.6 U盘启动

    第一步 准备工作 1 8G以上U盘 2 UltraISO虚拟光驱 试用即可 破解的话自行找一下教程或者激活码 下载地址 https cn ultraiso net xiazai html 3 CentOS 7 6 镜像 这里推荐1810或者
  • qt中路径使用的小结

    QCoreApplication applicationDirPath 帮助文档中的解释 返回包含应用程序可执行文件的目录 例如 如果您在C Qt目录下安装了Qt 并且运行regexp示例 该函数将返回 C Qt examples tool
  • C#中的时间戳

    来源 https blog guoqianfan com 2019 11 24 timestamp in csharp 什么是时间戳 时间戳默认是Unix时间戳 首先要清楚JavaScript与Unix的时间戳的区别 JavaScript时
  • 对象存储的几种方法

    我们有时候会有这样的需求场景 需要将一个对象以二进制形式保存在文件或者字符流中 以便下一次加载时可以直接从二进制文件或者流中直接读取对象 并对对象进行操作 对象存储的目的 本质是要存储对象中各个成员的数据 因此我们从两个角度来思考这个问题
  • 3DMAX安装包+安装教程

    1 复制链接记得删除后缀哦 部分网站会自动标明出处 2 链接是永久链接 放心食用 3 版本选择建议 建议选择2014 2018之间版本 太高的版本容易有BUG 3DMAX2020 链接 https pan baidu com s 1i65C
  • 《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分

    Frustum PointNets for 3D Object Detection from RGB D Data 论文及代码学习 二 代码部分 文章目录 Frustum PointNets for 3D Object Detection
  • 计算机毕业设计项目2023推荐

    2023年最新计算机毕业设计 本科 项目汇总 哈喽 大家好 大四的同学马上要开始做毕业设计了 大家做好准备了吗 博主给大家详细整理了计算机毕业设计最新项目 对项目有任何疑问 都可以问博主哦 这些系统很不错 建议把管理系统作为毕业设计 202
  • window10下载并安装docker desktop

    目录 window10安装docker时一般会用到两种方法 1 docker toolbox 2 docker desktop Install Docker Desktop on Windows 这是我的笔记本电脑配置 Lenovo t46
  • @Pointcut 使用

    作用 抽取通用逻辑 使用 定义切入点 选择合适的切入方法 范例 源自参考文章 注意代码中的注释 1 这个类需要使用 Aspect进行标注 Aspect public class Aspect1 2 定义了一个切入点 可以匹配Service1