spring —— AOP(各类通知)

接:spring —— AOP(前置通知)

前置通知(Before)外,AOP 里面还有返回通知(AfterReturning)异常通知(AfterThrowing)后置通知(After)环绕通知(Around)

一、返回通知 

切面类: 

package com.spring.aop;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {@AfterReturning(value = "execution(* com.spring.aop.Calculator.*(..))",returning = "result")public void afterReturningMethod(JoinPoint joinPoint, Object result){System.out.println(result);}
}

返回通知相较于前置通知,在 @AfterReturning 注解中增加了 returning 属性,该属性的属性值与 afterReturningMethod 的形参名称保持一致。当目标方法有返回值时,可用于接收目标方法的返回值。

二、异常通知

切面类:

package com.spring.aop;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {@AfterThrowing(value = "execution(* com.spring.aop.Calculator.*(..))",throwing = "ex")public void afterThrowingMethod(JoinPoint joinPoint, Throwable ex){System.out.println(ex);}
}

异常方法用于当目标方法出现异常时调用,特点是在 @AfterThrowing 注解中增加了 throwing 属性,其属性值与 afterThrowingMethod 方法的形参名称保持一致,用以接收目标方法的异常信息。

三、后置通知

 切面类:

package com.spring.aop;import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {@After(value = "execution(* com.spring.aop.Calculator.*(..))")public void afterThrowingMethod(){System.out.println("after method");}
}

后置通知与前置通知类似。

四、获取目标方法的名称及参数: 

切面类:

package com.spring.aop;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;import java.util.Arrays;@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {@Before(value = "execution(* com.spring.aop.Calculator.*(..))")public void beforeMethod(JoinPoint joinPoint){//获取目标方法名称System.out.println(joinPoint.getSignature().getName());//获取目标方法参数System.out.println(Arrays.toString(joinPoint.getArgs()));}
}

五、环绕通知

环绕通知等于是将以上四种通知在 try…catch…finally… 里面进行布置。

切面类:

package com.spring.aop;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {@Around(value = "execution(* com.spring.aop.Calculator.*(..))")public Object aroundMethod(ProceedingJoinPoint joinPoint){Object result = null;try {System.out.println("前置通知");result = joinPoint.proceed();  //调用目标方法System.out.println("返回通知");}catch (Throwable e){System.out.println("异常通知");e.printStackTrace();}finally {System.out.println("后置通知");}return result;}
}

1、aroundMethod 参数里面使用 ProceedingJoinPoint 类型,然后可以通过 .proceed() 调用目标方法。

2、如果目标方法有返回值,那么 aroundMethod 方法也应该有返回值。

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

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

相关文章

nginx的配置和使用

一、nginx支持win和linux版本的下载,选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释: 1、listen 要监听的服务的端口,符合这个端口的才会被监听 server_name要监听的服务地址,可能是ip,也可能是域名&#xf…

Dav_笔记10:Using SQL Plan Management之4

SQL管理库 SQL管理库(SMB)是驻留在SYSAUX表空间中的数据字典的一部分。它存储语句日志,计划历史记录,SQL计划基准和SQL配置文件。为了允许每周清除未使用的计划和日志,SMB使用自动空间管理。 您还可以手动将计划添加到SMB以获取一组SQL语句。从Oracle Database 11g之前的…

Docker学习笔记(自用,不定期更新)

知识点: 容器是 Docker 的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。 容器保护三个…

41-50题矩阵和字符串 在Java中,将大写字符转换为小写字符的方法主要有以下几种:

20240723 一、数组最后几个和字符串的两个448. 找到所有数组中消失的数字(和645. 错误的集合差不多)283. 移动零118. 杨辉三角119. 杨辉三角 II661. 图片平滑器(没看懂)598. 区间加法 II566. 重塑矩阵303. 区域和检索 - 数组不可变…

键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???

当在键盘上按下一个键时会进行一下操作: 1.当按下任意一个键时,键盘编码器监控会来判断按下的键是哪个 2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面 3.此时发送一个中断请求给中断控制器,中断控制器获取到中断号发送…

全球性“微软蓝屏”事件反思:如何预防大规模系统故障

写在开头 近日,由于微软视窗系统软件更新引发的全球性“微软蓝屏”事件,再次将网络安全与系统稳定性的问题推上了风口浪尖。此次事件不仅成为科技领域的热点新闻,也对全球IT基础设施的韧性与安全性进行了一次深刻的检验。美国电脑安全技术公…

Elasticsearch介绍、安装以及IK分词器 --学习笔记

Elasticsearch 是什么? Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许你以极快的速度存储、搜索和分析大量数据。Elasticsearch 基于 Apache Lucene 构建,提供了一个分布式、多租户能力的全文搜索引擎,带有 HTTP web 接口…

深入MySQL中的IF和IFNULL函数

在数据库查询中,我们经常需要根据条件来决定数据的显示方式。MySQL提供了多种内置函数来帮助我们实现这种条件逻辑,其中IF和IFNULL是两个非常有用的函数。在这篇博客中,我们将深入探讨这两个函数的用法和它们在实际查询中的应用。 IF函数 I…

笔记小结:现代卷积神经网络之批量归一化

本文为李沐老师《动手学深度学习》笔记小结,用于个人复习并记录学习历程,适用于初学者 训练深层神经网络是十分困难的,特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化(batch normalization)&#xf…

React中引入使用本地图片

1、css样式中,可以写成如下: .login {// 映射路径background: url(images/img-login.png);background-size: 100% 100%; } .box{// 相对路径background: url(../assets/images/box.png);background-size: 100% 100%; }2、在jsx文…

Redis-10大数据类型理解与测试

Redis10大数据类型 我要打10个1.redis字符串(String)2.redis列表(List)3.redis哈希表(Hash)4.redis集合(Set)5.redis有序集合(ZSet)6.redis地理空间(GEO)7.redis基数统计(HyperLogLog)8.redis位图(bitmap)9.redis位域(bitfield)10.redis流(Stream) 官网地址Redis 键(key)常用案…

Odoo Registry 源码解读:前端世界的魔法师

亲爱的Odoo探险家们,准备好踏上一段奇妙的代码冒险了吗?今天,我们要深入探索Odoo前端世界的一位神秘大师——Registry。它可能不像那些花哨的UI组件那样引人注目,但要知道,真正的高手都是低调的。Registry就像是Odoo世界里的甘道夫,默默地用魔法维持着整个中土世界的平衡…

卷与nfs实现多台主机容器之间的数据共享

容器存放数据到宿主机里 数据持久化:永久保存 数据共享:容器和容器 容器和宿主机 就是宿主机里的文件夹 /var/lib/docker/volumes docker 容器:容器运行起来是一个进程,进程的数据默认都在内存里,内存里的数据停电…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名(参数) 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

邮件流量分析

邮件流量分析是指对邮件系统中进出的邮件数量、类型、流向以及相关性能指标进行统计和评估的过程。这种分析有助于优化邮件系统的性能、检测异常活动、防止垃圾邮件和网络攻击,以及改善邮件营销策略。邮件流量分析可以分为几个主要方面: 邮件统计&#x…

MMROTATE的混淆矩阵confusion matrix生成

mmdetection中加入了混淆矩阵生成并可视化的功能,具体的代码在tools/analysis_tools/confusion_matrix.py。 mmrotate由于主流遥感数据集中的DOTA数据集标注格式问题,做了一些修改,所以我们如果是做遥感图像检测的Dota数据集的混淆矩阵&…

安装CUDA Cudnn Pytorch(GPU版本)步骤

一.先看自己的电脑NVIDIA 支持CUDA版本是多少? 1.打开NVIDIA控制面板 2.点击帮助---系统信息--组件 我的支持CUDA11.6 二.再看支持Pytorch的CUDA版本 三.打开CUDA官网 下载CUDA 11.6 下载好后,安装 选择 自定义 然后安装位置 (先去F盘…

Python - conda使用大全

如何使用Conda? 环境 创建环境 conda create -n spider_env python3.10.11查看环境 conda env listconda info -e激活环境 conda activate spider_env退出环境 conda deactivate删除环境 conda env remove -n spider_env包 导出包 说明:导出当前虚拟…

孙健提到的实验室的研究方向之一是什么?()

孙健提到的实验室的研究方向之一是什么?() 点击查看答案 A.虚拟现实B.环境感知和理解 C.智能体博弈D.所有选项都正确 图灵奖是在哪一年设立的?() A.1962B.1966 C.1976D.1986 孙健代表的实验室的前身主要研究什么?&…

【ffmpeg命令入门】ffplay常用命令

文章目录 前言ffplay的简介FFplay 的基本用法常用参数及其作用示例 效果演示图播放普通视频播放网络媒体流RTSP 总结 前言 FFplay 是 FFmpeg 套件中的一个强大的媒体播放器,它基于命令行接口,允许用户以灵活且高效的方式播放音频和视频文件。作为一个简…