Springboot之AOP的执行顺序

news2024/11/25 6:12:38

AOP执行顺序验证

  项目引入了依赖。自动开启了aop的配置。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

切面上配置@Order注解

  切面类AopTest1,order定义为2

@Component
@Aspect
@Order(2)
public class AopTest1 {
    @Pointcut("execution( * com.example.service.AopService.*(..))")
    public void pointCutMethod() {
    }
    @After("pointCutMethod()")
    public void myAfter(JoinPoint point) {
        System.out.println("我是AopTest1#myAfter");
    }
    @Before("pointCutMethod()")
    public void myBefore(JoinPoint point) {
        System.out.println("我是AopTest1#myBefore");
    }
    @Before("pointCutMethod()")
    public void myBefore2(JoinPoint point) {
        System.out.println("我是AopTest1#myBefore2");
    }
    @Around("pointCutMethod()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("我是AopTest1#around before");
        Object res = joinPoint.proceed();
        System.out.println("我是AopTest1#around after");
        return res;
    }
    @AfterThrowing(value = "pointCutMethod()", throwing = "e")
    public void afterThrowing(Exception e) {
        System.out.println("我是AopTest1#afterThrowing");
    }
    @AfterReturning(value = "pointCutMethod()")
    public void afterReturning() {
        System.out.println("我是AopTest1#afterReturning");
    }
}

  切面类AopTest2,order定义为1

@Component
@Aspect
@Order(1)
public class AopTest2 {
    @Pointcut("execution( * com.example.service.AopService.*(..))")
    public void pointCutMethod() {

    }
    @After("pointCutMethod()")
    public void myAfter(JoinPoint point) {
        System.out.println("我是AopTest2#myAfter");
    }

    @Before("pointCutMethod()")
    public void myBefore(JoinPoint point) {
        System.out.println("我是AopTest2#myBefore");
    }

    @Before("pointCutMethod()")
    public void myBefore2(JoinPoint point) {
        System.out.println("我是AopTest2#myBefore2");
    }


    @Around("pointCutMethod()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("我是AopTest2#around before");
        Object res = joinPoint.proceed();
        System.out.println("我是AopTest2#around after");
        return res;
    }

    @AfterThrowing(value = "pointCutMethod()", throwing = "e")
    public void afterThrowing(Exception e) {
        System.out.println("我是AopTest2#afterThrowing");
    }


    @AfterReturning(value = "pointCutMethod()")
    public void afterReturning() {
        System.out.println("我是AopTest2#afterReturning");
    }
}

  测试业务类AopService,里面会抛出异常1/0

@Service
public class AopService {
    public void testMethod(){
        System.out.println("我是AopService#testMethod");
        int b = 1/0;
    };
}

  启动类。获取AopService,调用testMethod方法。

@SpringBootApplication
public class SongDm2Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SongDm2Application.class, args);
        AopService aopService = run.getBeanFactory().getBean(AopService.class);
        aopService.testMethod();
    }

}

  执行结果如下。
在这里插入图片描述
  目标对象方法去掉抛出异常,执行结果如下
在这里插入图片描述
在这里插入图片描述
  总结。AOP的执行顺序如下:
  1.目标方法抛异常:Around before–>Before–>目标方法–>AfterThrowing–>After
  2.目标方法不抛异常:Around before–>Before–>目标方法–>AfterReturning–>After–>Around After
  3.同一个切面内的多个同一类型的拦截方法。按字符排序。
  4.多个切面拦截同一个方法,受@Order排序影响。目标方法执行之前,和执行之后的拦截顺序看上面的实验结果。

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

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

相关文章

华为ICT——第三章图像处理基本任务

目录 1&#xff1a;数字图像处理的层次&#xff1a;&#xff08;处理-分析-理解&#xff09;顺序不能错&#xff1a; 2&#xff1a;图像处理&#xff08;图像处理过程&#xff09;&#xff1a; 3&#xff1a;图像分析&#xff08;特征提取&#xff09;&#xff1a; 4&#x…

vue3前端开发-开发环境安装篇

文章目录 1.安装nvm2.设置安装源为淘宝镜像3.通过nvm安装nodejs4. 安装pnpm4.1 安装pnpm4.2 配置 5.创建vite-vue项目6. vue3demo目录结构7. 扩展插件安装8. 用户代码片段8.1 设置8.2 快速生成代码 1.安装nvm 如果本地已经安装了nodejs&#xff0c;请先卸载。 nvm主要的作用就是…

ES系列十二、ES的scroll Api及分页实例

1.官方api 1.Scroll概念 Version&#xff1a;6.1 英文原文地址&#xff1a;Scroll 当一个搜索请求返回单页结果时&#xff0c;可以使用 scroll API 检索体积大量&#xff08;甚至全部&#xff09;结果&#xff0c;这和在传统数据库中使用游标的方式非常相似。 不要把 scroll 用…

力扣(LeetCode)2578. 最小和分割(C++)

哈希集合 请读者思考&#xff0c;num拆分成num1和num2&#xff0c;要使得num1 num2最小&#xff0c;应满足两条性质&#xff1a; num1和num2位数相同&#xff0c;或最多差一位。num1和num2应按数值从小到大在num中取数。 想到统计num的位数&#xff0c;以实现性质1的需要&a…

JavaSE的常用API学习——字符串相关

目录 一、什么是API 二、String字符串 (一)创建String对象的两种方式 1.直接赋值的内存模型 2.new的内存模型 (二)字符串之间的比较与equals 1.运算符 2.equls()方法 三、StringBuilder的用法 1.StringBuilder的构造方法 2.StringBuilder的常用成员方法 3.小练习&a…

Java中的异常处理方法

在Java开发中&#xff0c;异常处理是必不可少的一部分。良好的异常处理机制可以提高代码的可读性、可靠性&#xff0c;保证程序的稳定性。本文将深度剖析Java中的异常处理机制&#xff0c;并分享一些最佳实践方法&#xff0c;帮助您在实际项目中优雅地处理异常。 一、Java异常…

我用PYQT5做的第一个实用的上位机项目(五)

制作一个动态仪表盘。 具体过程参照前面技术储备阶段的文章&#xff1a; PYQT制作动态时钟-CSDN博客 使用PYQT5简单制作动态仪表盘-CSDN博客 仪表盘由以下部件构成&#xff1a;背景 指针 表盘 进度条&#xff08;设定值&#xff09; 遮罩 设定和显示 其中表盘、 进度条和指…

UWB PDOA定位原理

以下是笔记总结,内容不完全正确 1,什么是PDOA PDOA &#xff0c;英文全称是Phase-Difference-of-Arrival&#xff0c;信号到达相位差 PDOA定位算法的原理如下&#xff1a; UWB基站上放置两个相同且间隔d<λ/2的天线&#xff0c;UWB标签上的信号到达两个天线的相位差就在-180…

实体机 安装 centos

实体机 安装 centos 制作U盘的时候&#xff0c;使用的ultraISO 同样方法一个u盘制作的有问题&#xff0c; 另外一个制作的没有问题。 可能和选择 usb-hdd 或者 usb-hdd 有关 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 参考文档&#xff1a; http:…

数据结构的魔法:高级算法优化实战

文章目录 数据结构与算法&#xff1a;基础知识数据结构算法 高级算法优化实战1. 数据缓存2. 哈希表优化3. 算法优化 高级算法优化的挑战结论 &#x1f389;欢迎来到数据结构学习专栏~数据结构的魔法&#xff1a;高级算法优化实战 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;…

ui设计师简历自我评价的范文

ui设计师简历自我评价的范文篇一 本人毕业于艺术设计专业&#xff0c;具有较高的艺术素养&#xff0c;平时注重设计理论知识的积累&#xff0c;并将理论应用到作品中。了解当下设计的流行趋势&#xff0c;设计注重细节、重视用户体验&#xff0c;对色彩搭配有着浓厚的兴趣&…

[经验]如何解决python环境中的版本冲突问题

总结一下最近的经验 文章目录 一.报了什么错的时候可能是版本冲突二.解决版本冲突的工作流1.pip check2.libraries.io3.查看PyPI、官方文档和GitHub issues3. StackOverflow等各种类似平台4.借助AI(如果用perplexity等联网的ai相当于在这一步综合了前面步骤) 一.报了什么错的时…

XPath在数据采集中的运用

在进行数据采集和信息提取的过程中&#xff0c;XPath是一种非常强大且灵活的工具。它可以在HTML或XML文档中定位和提取特定的数据&#xff0c;为数据分析和应用提供了良好的基础。本文将介绍XPath的基本概念和语法&#xff0c;并分享一些实际操作&#xff0c;帮助您充分了解XPa…

web3.0时代分布式网络协议的异同

Web3.0时代标志着分布式网络协议的兴起&#xff0c;其中IPFS&#xff08;InterPlanetary File System&#xff09;和NDN&#xff08;Named Data Networking&#xff09;是备受瞩目的项目。尽管它们都属于分布式网络协议领域&#xff0c;但在多个方面存在显著区别。以下是IPFS和…

Elasticsearch:使用 huggingface 模型的 NLP 文本搜索

本博文使用由 Elastic 博客 title 组成的简单数据集在 Elasticsearch 中实现 NLP 文本搜索。你将为博客文档建立索引&#xff0c;并使用摄取管道生成文本嵌入。 通过使用 NLP 模型&#xff0c;你将使用自然语言在博客文档上查询文档。 安装 Elasticsearch 及 Kibana 如果你还没…

如何做好互联网产品需求分析?看这里!

文章目录 &#x1f31f;需求分析&#x1f34a;领域知识分析&#x1f34a;技术知识分析&#x1f389;人工智能技术的基本原理&#x1f389;开发工具和组件库&#x1f389;数据处理和模型训练&#x1f389;代码库和技术标准 &#x1f34a;数据分析&#x1f389;准备数据&#x1f…

途虎养车上市、京东养车“震虎”,如何突围汽车后市场?

“汽车后市场第一股”终于来了&#xff01; 赶在十一黄金周之前&#xff0c;途虎养车股份有限公司(09690.HK&#xff0c;下称“途虎养车”)于9月26日挂牌港交所&#xff0c;开盘价为28港元/股&#xff0c;与发行价持平&#xff1b;IPO首日报收29.50港元/股&#xff0c;涨幅5.3…

【图像处理GUI】图像颜色过滤、颜色强调、反转颜色等(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Tomcat历史版本下载地址(Tomcat7或更早)

官网地址直达 随便选择一个版本 点击找到自己想要的版本下载就可以了&#xff01;

干洗店会员管理系统上门洗鞋小程序介绍

干洗店管理系统&#xff0c;洗衣洗鞋店收银会员管理小程序&#xff0c;是在传统的洗护行业中&#xff0c;使用现在比较流行的线上下单系统&#xff0c;可以帮助门店实现便捷收银、会员管理、商品销售等功能。 具体如下&#xff1a; 1.会员管理&#xff1a;支持会员储值&#xf…