Spring:AOP的五种通知类型(12)

news2024/11/27 4:37:13

AOP的五种通知类型

  • 前置通知:@Before注解
  • 后置通知:@After注解
  • 环绕通知:@Around注解(掌握)
  • 返回后通知:@AfterReturning(了解)
  • 异常后通知:@AfterThrowing(了解)
  • 通知类型总结

前置通知:@Before注解

在method方法上添加@Before注解

@Component
@Aspect
public class MyAdvice {

    /**
     *  定义切入点
     */
    @Pointcut("execution(int com.itheima.dao.BookDao.update())")
    public void pt(){}


    /**
     * 定义一个共性方法
     * 切面 绑定通知 和 切入点
     */
    @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

在这里插入图片描述

后置通知:@After注解

在method方法上添加@After注解

@Component
@Aspect
public class MyAdvice {

    /**
     *  定义切入点
     */
    @Pointcut("execution(int com.itheima.dao.BookDao.update())")
    public void pt(){}


    /**
     * 定义一个共性方法
     * 切面 绑定通知 和 切入点
     */
    @After("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

在这里插入图片描述

环绕通知:@Around注解(掌握)

在方法上方加上@Around注解;

@Component
@Aspect
public class MyAdvice {

    /**
     *  定义切入点
     */
    @Pointcut("execution(int com.itheima.dao.BookDao.update())")
    public void pt(){}


    /**
     * 定义一个共性方法
     * 切面 绑定通知 和 切入点
     * 执行环绕通知的时候ProceedingJoinPoint pjp参数一定要有,只有通过该参数调用pip.proceed方法才能执行原始方法的内容。
     * pip.proceed()调用原始方法会有一个Object res类型的返回值,如果原始方法有返回值则res对该返回值进行接收并且可以进行返回,如果没有返回值则res=null.
     */
    @Around("pt()")
    public Object method(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("before around ....");
        // 表示对原始操作的调用
        Object res = pjp.proceed();
        System.out.println("原始方法中的返回值为:" + res);
        System.out.println("after around ....");
        return res;
    }
}

在这里插入图片描述

环绕通知注意事项

  1. 环绕通知必须依赖形参 ProceedingJoinPoint 才能实现对原始方法的调用,进而实现原始方法调用前后同时添加通知。
  2. 通知中如果未使用 ProceedingJoinPoint 对原始方法进行调用将跳过原始方法的执行。
  3. 对原始方法的调用可以不接收返回值,通知方法设置成void即可,如果接收返回值,最好设定为Object类型
  4. 原始方法的返回值如果是void类型,通知方法的返回值类型可以设置成void,也可以设置成Object。
  5. 由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须要处理Throwable异常。

返回后通知:@AfterReturning(了解)

在方法上方加上@AfterReturning注解;

@Component
@Aspect
public class MyAdvice {

    /**
     * 定义切入点
     */
    @Pointcut("execution(int com.itheima.dao.BookDao.update())")
    public void pt(){}


    /**
     * 定义一个共性方法
     * 切面 绑定通知 和 切入点
     */
    @AfterReturning("pt()")
    public void method() throws Throwable {
        System.out.println("AfterReturning .... ");
    }
}

在这里插入图片描述

异常后通知:@AfterThrowing(了解)

在方法上方加上@AfterThrowing注解;

@Component
@Aspect
public class MyAdvice {

    /**
     * 定义切入点
     */
    @Pointcut("execution(int com.itheima.dao.BookDao.update())")
    public void pt(){}


    /**
     * 定义一个共性方法
     * 切面 绑定通知 和 切入点
     */
    @AfterThrowing("pt()")
    public void method() throws Throwable {
        System.out.println("AfterThrowing .... ");
    }
}

在这里插入图片描述

通知类型总结

知识点1:@Before

名称@Before
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

知识点2:@After

名称@After
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法后运行

知识点3:@Around

名称@Around
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前后运行

知识点4:@AfterReturning

名称@AfterReturning
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法正常执行完毕后执行

知识点5:@AfterThrowing

名称@AfterThrowing
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法运行抛出异常后执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播回顾 | 【原引擎】解密云原生安全:如何应对新型BOT攻击?

BOT流量是指在互联网上对Web网站、APP应用、API接口通过工具脚本、爬虫程序或模拟器等非人工手动操作访问的自动化程序流量,一般也称为机器人流量。而恶意的BOT流量通过利用代理或秒拨IP、手机群控等手段来爬取信息数据、抢刷接口、薅羊毛、外挂作弊等恶意攻击行为&…

招标 | 近期隐私计算项目招标中标25(大连理工大学、中国电信北京研究院、松山湖材料实验室、北京控制工程研究所、光大永明)

开放隐私计算 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。 177篇原创内容 …

apache-POI ,easyexcel(3个办公软件)

POI介绍 ApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 HSSF-提供读写MicrosoftExcelXLS格式档案的功能XSSF-…

【设计模式】适配器模式

适配器模式属于结构型模式,主要解决两个已存在的功能相近的接口间不能兼容的问题。在准备将一个接口对接到另一个接口中时,发现另一个接口(目标)与准备对接的接口(适配者)因不兼容而无法正常运行功能时&…

Allegro如何打盲埋孔操作指导

Allegro如何打盲埋孔操作指导 Allegro支持打盲埋孔,具操作如下 首先保证库路径下方有盲埋孔的封装 打开规则管理器 选择Physical规则,点击VIAS,会出现一个对话框,勾选show vias from Library ,出现孔的封装 把孔添加到via list里面去,之后点击ok 加好的效果如

web前端-javascript-数据类型(6种数据类型/字符串、数值、布尔值、空值、未定义、对象,String字符串、引号问题、转义字符、字面量和变量输出)

文章目录数据类型1. 介绍说明2. String 字符串引号问题转义字符字面量和变量的输出数据类型 var str "hello"; str 我说:"今天天气真不错!";str 我说:"今天\t天气真不错!"; str "\\\\\\";//输出字面量str …

ESP32基础应用之使用两个ESP32通过阿里云物联网平台实现相互通信

文章目录1 阿里云物联网平台2 程序编写2.1 ESP32-COM4 设备2.1 ESP32-COM5 设备3 实验现象分析1 阿里云物联网平台 在设备管理下创建两个设备,参考ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议) 在规则引擎下创建云产品流…

前后端分离 基础(新增与查询)

目录 一,后端 1.1 修改settings---->搜索Maven 1.2 application.yml文件与jdbc.properties文件 对应数据库的账号密码 application.yml 1.4 jdbc.properties 1.3 generatorConfig.xml jdbc驱动jar包 1.4 从本地导入pom依赖 POM 1.5 自动生成 1.6 各个层…

axure学习:设置部件固定到浏览器,预览时部件消失

​在Axure中有一个非常好用且常用的部件——动态面板,动态面板很常用的一个功能是利用不同状态页做tab的切换、轮播图等,但咱们今天要说的不是关于这方面的问题。这里我们要说的是关于动态面板的属性:固定到浏览器的使用。 关于这一点&#…

react(任意组件之间传值--消息订阅与发布、路由)

目录 兄弟组件传值--任意组件之间传值 fetch发送请求: react 路由 解决样式丢失的问题: 路由的模糊匹配和严格匹配 嵌套路由 向路由组件传参 前端中文学习网站:印记中文 - 深入挖掘国外前端新领域,为国内 Web 前端开发人员提…

最优化方法总结——梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法

目录 1 最优化方法的结构 2 常用最优化方法对比分析 3 相关计算公式 1 最优化方法的结构 最优化问题的一般形式为: 其中为决策变量,是目标函数,为约束集或可行域。特别地,如果,则最优化问题成为无约束最优化问题。 …

目标检测DiffusionDet: Diffusion Model for Object Detection

先贴一张流程图: github:GitHub - ShoufaChen/DiffusionDet: PyTorch implementation of DiffusionDet (https://arxiv.org/abs/2211.09788) pdf: https://arxiv.org/abs/2211.09788 Abstract: 本文提出了一个新的框架DiffusionDet,将目标检测问题构建…

Lombok的@Data注解包含的方法(没有全参构造方法)

Lombok的Data注解包含的方法(没有全参构造方法) 目录Lombok的Data注解包含的方法(没有全参构造方法)结论:测试:1.Maven引入依赖2.安装lombok插件3.编写实体类4.编译5.查看target文件6.编译后的源代码结论&a…

实用的3款视频添加水印软件分享,简单易上手

如今刷短视频已经成为许多小伙伴饭后闲暇之余消遣的项目,也有不少人因此加入了创作短视频的队列。但是在分享前,最好是对自己的作品加上水印。为什么呢?第一是可以起到更好的宣传作用,第二是防止他人盗窃作品内容,毕竟…

卷积输入输出维度计算公式,Conv, Dilation Conv, Padding, Kernel_size, Output的维度计算关系

define i input o output p padding k kernel_size s stride d dilation 公式 o [i 2p - k - (k-1)(d-1)]/s 1 举例 当 padding “same” 时,输入尺度和输出尺度相同。 oi 则有: p[(i-1)s-i k(k-1)(d-1)]*0.5 假设 k5, s1, 那么 p[(i-1) …

深度学习入门---《白话机器学习的数学》笔记

文章目录一、基础:回归的实现1、训练数据click.csv2、参考公式:3、代码实现:4、运行结果:5、验证:二、多项式回归1、参考公式2、代码实现3、运行结果三、随机梯度下降法的实现1、参考公式小批量(mini-batch…

F. Quests(二分)

Problem - F - Codeforces 有n个任务。如果你完成第i个任务,你将获得ai币。你每天最多只能完成一个任务。然而,一旦你完成了一个任务,在K天内你不能再做同样的任务。(例如,如果k2,你在第1天做了任务1,那么你…

radiantq:jQuery Gantt Package--好使的HTML5甘特图

Radiantq--jQuery Gantt Package是一个真正跨平台的、基于原生 HTML5/jQuery 的实现,带有 2 个不同的甘特图小部件。 部署在众多垂直领域 无论您的应用程序属于哪个领域,甘特图都是基于时间的信息的理想可视化工具,包括在软件开发、施工、钻井…

JNoteHelper 给你的java swing或桌面程序提供一双翅膀

JNoteHelper 使用swing构建的java程序, 主要基于miglayout,swingx,flatlatf, 本来打算作为个人笔记的助手, 但是事与愿违, 发现理想和现实很骨感. 项目基于windows测试及开发 ,所以运行效果图片都基于windows 截图 1. 项目地址 JNoteHelper github地址 gitee地址 gitcode地址…

玩法专利获批,发布4年《Beat Saber》为何持续火爆

从2018年首次上线以来,《Beat Saber》被大家爱了4年多,直到现在热度未减,依然是史上最赚钱的VR游戏之一。该作最开始的概念,就是用红、蓝两色的光剑,根据箭头方向和节奏去切方块,玩法简单爽快,受…