Spring AOP切面中的前置通知方法中有异常且未捕获,切入点方法中业务代码执行问题分析

Spring AOP 前置通知、返回通知、异常通知、后置通知、环绕通知 前置技能: Java、JDBC、Spring IOC快速入门 、 Spring IOC 注解方式注入 什么是AOP: 面向切口编程(Aspect Oriented Programming),AOP是OOP的延续,是Spring框架的一个重要内容。 AOP利用称为"横切"的技术,剖解开封装的对象内部,把多个类的公共行为封装到一个可重用模块中,便于减少重复代码,降低模块之间的耦合度,AOP符合开闭原... 阅读详情

今天遇到一个问题,记录一下。

问题描述:

        前置通知方法中使用了线程池ThreadPoolExecutor,线程中调用了方法A,在A方法中人为增加了一个除数为0的异常,且没有捕获异常,这时候发现我的切入点方法(即业务代码方法)中代码竟然执行了。

分析原因:

    难道前置通知中有异常,业务代码会执行吗?

    首先,我在前置通知方法中增加一个异常,来测试业务代码是否执行,发现业务代码没有执行,说明前置通知中异常且未捕获,会影响业务代码的;

    那么为什么我的业务代码会执行呢?

然后,我把线程池去掉,把线程池内代码拿出来,在前置通知中直接调用方法A,这时候业务代码没有执行。

从这个测试结果可以推断出,是线程池ThreadPoolExecutor影响的,可能是线程池里捕获了异常。后来查看了线程池ThreadPoolExecutor的相关代码,发现我创建的线程池设置了线程异常处理器handler(RejectedExecutionHandler

),这个handler会捕获线程池内异常。如果不设置handler,线程池也会使用默认的handler,同样也会捕获异常。

 

另外一个关于AOP的讨论:前置通知方法和切入点方法是在同一个线程吗?

我的答案是同一个线程,因为我在前置通知和切入点方法中都打印了线程名字,发现是一样的。

但是网上也有说不是同一个线程的,具体原因没说,各位如果认为不是同一个线程的,希望留言说下原因。多谢!!!

 

 

 


 
Spring中的AOP概念介绍使用、AOP相关术语、切入点表达式(面向切面编程上篇) 编写代码的时候只关注主业务功能(非共性功能) * 将共性功能抽取出来 * 在代码执行的时候将 "共性功能与非共性功能" , "织入" 到一起生成 "代理对象" /*底层是动态代理模式*/* 什么是AOP?* 面向切面编程 * 它的特点是什么?* 将切面代码(多个方法中的相同代码) 与主业务代码分开编写 * 在程序执行过程中动态将 "切面代码" 与 "主业务代码织入" 到一起 * "底层使用的是动态代理模式"* 切入点表达式由哪几个部分组成? 阅读详情

相关推荐

概率论 知识图谱 + 实战案例解析

本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。

weixin_29051193的博客 267

AOP的使用

aop

qq_36806434的博客 279

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 426

Spring aop 切不进去原因。。

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34120274的博客 2049

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 378

基于分数阶傅里叶变换的chirp信号检测与参数估计(原理附代码)

线性调频信号(chirp信号) 顾名思义,该信号的频率随着时间线性变换,其复数表达形式如下: s(t)=e2jπ(f0t+0.5μt2)s(t)=e^{2j\pi(f_0 t+ 0.5\mu t^2)}s(t)=e2jπ(f0​t+0.5μt2) 根据欧拉公式,其相位项为2π(f0t+0.5μt2))2\pi(f_0 t+ 0.5\mu t^2))2π(f0​t+0.5μt2))。信号的角频率是相位对时间的导数。对相位求导后有2π(f0+μt)2\pi(f_0+\mu t)2π(f0​+μt),显然,f0f

weixin_42845306的博客 1万+

Spring AOP中定义切点(PointCut)和通知(Advice)

本文讨论一下Spring AOP编程中的两个关键问题,定义切点和定义通知,理解这两个问题能应付大部分AOP场景。 如果你还不熟悉AOP,请先看AOP基本原理,本文的例子也沿用了AOP基本原理中的例子。 切点表达式 切点的功能是指出切面的通知应该从哪里织入应用的执行流。切面只能织入公共方法。 在Spring AOP中,使用AspectJ的切点表达式语言定义切点其中excecution()

GarfieldEr007的专栏 2102

linux CentOS7安装VCS、Verdi、SCL

1.Linux下所需安装文件 链接:https://pan.baidu.com/s/1E_l4ARFYEnp57jlX95Bpog 提取码:ggdz ​ synopsysinstaller_v5.0 ​ scl_v2018.06 ​ vcs_mx_vO-2018.09-SP2 ​ vcs_vO-2018.09-SP2 ​ verdi-2018.9 2.Windows破解文件 ​ scl_keygen_2030 3.安装installer 打开终端,进入synopsysinstaller_

loveyelong的博客 4620

Spring之RestControllerAdvice无效、切面日志无法捕获异常

切面日志中是否包含下列代码 @Around("pointCutMethod()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { }

Cabbage 2672

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1076

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 574

Spring AOP面向切面编程:理解篇(一看就明白)

一直想着怎么去通俗的讲解AOP,看了一篇文章受到了启发(https://blog.youkuaiyun.com/qukaiwei/article/details/50367761),下面我加入自己的理解,咱们来说说AOP! 一、到底什么是AOP(面向切面编程)? 无论在学习或者面试的时候,大家都会张口说spring的特性AOP和IOC(控制反转咱们下一篇讲),有些大神理解的很到位,但是对于大多数初中级工程...

healer的博客 8万+

Win11此电脑怎么放在桌面上?Win11此电脑如何显示在电脑桌面上?

相信用习惯Win10的用户都喜欢电脑电脑桌面上的此电脑,但是很多用户更新完Win11正式版以后,发现桌面只有回收站和Microsoft Edge图标,没有此电脑。那么,Win11此电脑要如何显示呢?下面小编为大家简单介绍一下操作方法!5、桌面图标设置窗口,点击勾选计算机,然后点击确定,桌面就可以显示此电脑图标了。1、桌面空白处,点击右键,在打开的菜单项中,选择显示设置;4、个性化 - 主题,相关设置下,点击桌面图标设置;3、右侧点击主题(安装、创建、管理);2、设置窗口,左侧点击个性化;

shengyin714959的博客 13万+

【Spring】一文带你吃透AOP面向切面编程技术(上篇)

什么是AOP?AOP(Aspect Orient Programming):面向切面编程。Aspect:表示切面,给业务方法增加的功能,叫做切面。切面一般都是非业务功能,而且切面功能一般都是可以复用的。例如日志功能,事务功能,权限检查,参数检查,统计信息等等。Orient:面向,对着 Programming:编程。怎么理解面向切面编程? 以切面为核心设计开发你的应用。1)设计项目时,找出切面的功能。2)安排切面的执行时间,执行的位置。 AOP作用 :1. 让切面功能复用。2. 让开发人员专注业务逻辑....

YOU__FEI的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring之AOP切面编程

AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程它是面向对象编程的一种补充和完善它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。

从基础到源码解析的学习记录 2251

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SpringBoot核心特性—AOP(详解AOP通知类型:环绕通知、前置通知等,以及AOP的连接点、通知、切入点、切面、目标对象以及通知顺序)

SpringBoot核心特性—AOP(详解AOP通知类型:环绕通知、前置通知等,以及AOP的连接点AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程),面向切面编程就是面向特定方法编程。减少重复代码提高开发效率维护方便面向这样的指定的一个或多个方法进行编程,我们就称之为 面向切面编程。AOP面向方法编程,就可以做到在不改动这些原始方法的基础上,针对特定的方法进行功能的增强。AOP的作用:在程序运行期间在不修改源代码的基础上对已有方法进行增强(无侵入性: 解耦)

Java技术加油站的博客 1748

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring之AOP详解

AOP介绍 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。 面向切面是面向对象中的一种方式而已。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程。常见的使用场景: i :日志 ii: 事务 iii:数据库操作 … 面向切面编程的几个核心概念 概念 ...

波波烤鸭的博客 6645

【spring原理】AOP面向切面编程

spring AOP 面向切面编程

yican2580的博客 2260

AOP面向切面

1.什么是Spring的AOP? AOP又叫"面向切面编程",是对传统的面向对象编程的一个补充,主要的操作对象就是"切面 ",可以简单的理解它是贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。 相当于将我们原本一条线执行的程序在中间切开加入一些其他操作。 在应用AOP编程时,任然需要定义公共功能,但可以明确定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的类里——这样的类我们通常称为“切面”。如图:AOP切面模型图。

weixin_44279264的博客 3802

spring之AOP(面向切面编程)和五大通知(前置通知、后置通知、异常通知、环绕通知、过滤通知)

一、aop的介绍 二、前置通知 三、后置通知 四、环绕通知 五、异常通知 六、过滤通知 七、总结

qq_54936371的博客 4043

spring aop切面的使用 前置 环绕和异常

什么是aop,为什么需要aop AOP:aspect oriented parogramming面向切面编程,是对所有对象或者是某类对象编程,核心:在不增加代码的基础上还增加新功能 1就是为了方便,看一个国外很有名的大师说,编程的人都是“懒人”,因为他把自己做的事情都让程序做了。用了aop能让你少写很多代码,这点就够充分了吧 2就是为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去...

进化的深山猿 3485

spring之aop切面(通知,切入点)配置

切面: 切面由切点和增强(引介)组成 aspectj联盟会解析配置的切入点表达式 AspectJ简介 AspectJ是一个基于Java语言的AOP框架 Spring2.0以后新增了对AspectJ切点表达式支持 @AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面 新版本Spring框架,建议使用AspectJ方式来开发A...

Seven71111的博客 1947

spring之aop(前置通知,后置通知,环绕通知,过滤通知,异常通知)

1、AOP中关键性概念 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出 目标(Target):被通知(被代理)的对象 注1:完成具体的业务逻辑 通知(Advice):在某个特定的连接点上执行的动作,同时Advice也是程序代码的具体实现,例如一个实现日志记录的代码(通知有些书上也称为处理) 注2:完成切面编程 代理(Proxy):将通知应用到目标对象后创建的对象(代理=目标+通知) 例子:外科医生+护士 注3:只有代理对象才有AOP功能,而AOP的代码是写在通.

m0_58525944的博客 4208

【Spring】AOP 面向切面编程-前置通知(掌握)

总结: Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。 5个注解表示切面的5个执行时间, 这些注解叫做通知注解。 @Before : 前置通知 @AfterRetunring: 后置通知 @Around: 环绕通知 @AfterThrowing:异常通知 @After:最终通知 使用aspectj框架的注解,实现前置通知 实现步骤: 新建maven项目 修改pom.xml 加入依赖: spring-context依赖, spring-aspects依赖(

爱写bug的王六六 2766

【Spring AOP(面向切面)切点、切面和通知介绍以及应用】

切点定义了在哪些连接点(Join Point)上应用切面逻辑。连接点是程序执行过程中的一些特定的点,例如方法调用、方法执行、构造函数调用等。切点通过表达式来精确地指定这些位置。在 Spring AOP 中,通常使用 AspectJ 切点表达式来定义。例如,通过execution(* com.example.service…(…))这样的表达式,可以指定在com.example.service包及其子包下的所有类的所有方法上应用切面逻辑。

weixin_56693899的博客 2713
上一篇: redis的CLUSTER 、SINGLETON、 SHAREED及哨兵模式详解
下一篇: Spring框架中InitializingBean的作用
一路奔跑1314
博客等级 码龄16年 247粉丝 123原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路奔跑1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值