spring四大通知与环绕通知的配置一篇文章带你快速了解

Spring Aop详细讲解 SpringAOP是面向切面编程,通过分离横切逻辑(如日志、权限)与核心业务实现代码复用和解耦。核心概念包括:切面(切入点+通知)、连接点(方法执行点)、通知类型(前置/环绕/后置等)。SpringAOP基于动态代理(JDK/CGLIB)在运行时织入增强逻辑。使用步骤:1)引入依赖;2)定义业务类;3)通过@Aspect编写切面类配置切入点和通知。典型应用场景包括日志记录、事务管理等。通过生活化类比(如餐厅服务流程)可快速理解其设计思想,先掌握基本使用再深入原理。 阅读详情

先写一个模拟日志通知的Logger类并配置相应的注解标签

@Component("logger")//把logger类交给spring
@Aspect//表示当前是一个切面类
public class Logger {
    @Before("execution(* com.lwh.service.impl.UserServiceImpl.*(..))")
    public void printLog(){
        System.out.println("前置通知日志打印了");
    }
    @AfterReturning("execution(* com.lwh.service.impl.UserServiceImpl.*(..))")
    public void afterReturnPrint(){
        System.out.println("后置通知打印了");
    }
    @AfterThrowing("execution(* com.lwh.service.impl.UserServiceImpl.*(..))")
    public void afterThrowingPrint(){
        System.out.println("异常通知打印了");
    }
    @After("execution(* com.lwh.service.impl.UserServiceImpl.*(..))")
    public void afterPrint(){
        System.out.println("最终通知打印了");
    }

然后在bean.xml配置相应的注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
       <context:component-scan base-package="com.lwh"></context:component-scan>//扫描包
       <aop:aspectj-autoproxy></aop:aspectj-autoproxy>//自动完成创建代理织入切面的工作
</beans>

这样就完成了注解的四大通知的配置,接下来看看环绕通知的配置

首先要在bean.xml加上如下

<aop:config>
    <aop:pointcut id="pt1" expression="execution(* com.lwh.service.impl.*.*(..))"/>
    <aop:aspect id="logAdvice" ref="logger">
        <aop:around method="arroundPrintLog" pointcut-ref="pt1"></aop:around>
    </aop:aspect>
</aop:config>

然后在logger类中加上如下

public Object arroundPrintLog(ProceedingJoinPoint pjp){
    Object rtValue=null;
    try {
        Object[] args=pjp.getArgs();
        System.out.println("环绕前置通知开始打印");//以pjp.proceed为参照物
        rtValue=pjp.proceed(args);   //明确调用业务层方法:切入点方法
        System.out.println("环绕后置置通知开始打印");
        return rtValue;
    }catch (Throwable e)
    {    //catch表示异常通知
        System.out.println("环绕异常通知开始打印");
        throw new RuntimeException(e);
    }
    finally {//finall表示最终通知
        System.out.println("环绕最终通知开始打印");
    }

}

tips:

问题:当有环绕通知的时候 切入点方法就不会执行了 而前置通知还可以执行
分析:通过对比动态代理的环绕通知代码 发现动态代理有明确的切入点方法调用 而我们的代码中没有
解决:spring框架为我们提供了一个借口,ProceedingJoinPoint 该借口有一个方法proceed() 此方法就相当于明确调用切入点的方法 该接口可以作为环绕通知的方法参数 在程序执行时 spring会为我们提供该接口的实现类供我们使用

LTC3783 LED驱动控制器设计与效率优化详解 开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波 阅读详情

相关推荐

Appsflyer Web2App实战指南:OneLink与Web SDK深度对比

本文深入对比了Appsflyer实现Web2App的两大核心工具:OneLink智能链接与Web SDK。OneLink提供开箱即用的智能跳转,部署快捷,适合快速推广;Web SDK则支持高度自定义的用户行为追踪,适合深度分析与精细化运营。文章提供了详细的配置指南、场景化选型建议及实战避坑技巧,帮助营销与开发团队根据自身需求选择最佳方案,有效提升从网页到应用的转化率与归因精度。

weixin_29213655的博客 459

Spring AOP -- 10大细节之细节八:环绕通知

8、环绕通知 1、环绕通知是Spring中最强大的通知,环绕通知其实就是一个动态代理 2、手写版的动态代理: * try{ * @Before //前置通知 * method.invoke(obj,args); * @AfterReturning //返回通知 * } * catch(Exception e){ * @AfterThrowing //异常通知 * * } * finally{ * @After //后置通知 *环绕通知中有一个参数:ProceedingJoinPo

weixin_42389904的博客 1094

解锁全志T113-i隐藏技能:用RISC-V核跑实时系统比STM32还稳?

本文深入探讨了全志T113-i SoC的异构架构潜力,重点解析如何利用其内置的玄铁C906 RISC-V核心独立运行实时系统。通过对比传统MCU与Linux方案,文章提供了从RISC-V核心启动、FreeRTOS移植到与Linux主核进行高效异构通信的完整实战指南,为工控等需要兼顾丰富应用与硬实时控制的场景提供了高集成度的单芯片解决方案。

ansible6ops的博客 496

四大通知

1.前置通知,实现MethodBeforeAdvice接口,重写 public void before(Method method, Object[] args, Object target) throws Throwable方法        ...

chongrang0347的博客 239

附录B:Standard Delay Format(SDF)(上)

本附录将介绍标准延迟标注格式,并说明了如何在仿真中执行反标。 延迟格式描述了设计网表的单元延迟和互连走线延迟,无论设计是用两种主要硬件描述语言(VHDL或Verilog HDL)中的哪一种所描述的。 本章还会介绍仿真的反标(backannotation),STA的反标其实是一个简单直接的过程,其中DUA中的时序弧将由SDF所指定的延迟进行标注。

To the beyond and infinity! 5414

matlab特征提取和分类_SAST Weekly|MATLAB机器学习初探——做个心音分类器

SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至 eesast@mail.tsinghua.edu.cn , 期待你的作品!本期的SAST weekly,想跟大家分享一下如何用MATLAB进行初步的机器学习,构建一个正常/...

weixin_36453829的博客 5582

spring-环绕通知 @Around

环绕通知 目标方法的前和后都能增加功能 在目标方法执行之前之后执行。被注解为环绕增强的方法要有返回值,Object 类型。并 且方法可以包含一个ProceedingJoinPoint 类型的参数。接口ProceedingJoinPoint 其有-一个 proceed()方法,用于执行目标方法。若目标方法有返回值,则该方法的返回值就是目标方法 的返回值。最后,环绕增强方法将其返回值返回。该增强方法实际是拦截了目标方法的执行。 环绕通知的方法定义 public公共 必须有一个返回值,推荐使用Object 方法

兮遥 4003

2025.1.16——五、LoveSQL1 sqlmap文件类|万能密码

题目来源:BUUCTF[极客大挑战2019]LoveSQL1。

2402_87387800的博客 1071

javaee期末复习选择题

javaee复习题(选择)

weixin_53912482的博客 1万+

【嵌入式DIY实例-ESP32篇】-热成像仪

在本文中,我们将使用 MLX90640 热像仪和 1.8 英寸 ST7735 TFT 显示屏,构建一款基于 ESP32 的高性能紧凑型热像仪。本项目旨在打造一款便携、响应迅速的热像仪,具有增强的图像质量、优化的帧率和精准的温度读数。

视觉与物联智能 881

【FreeSwitch开发实践】外呼网关配置(拨打电话)

FreeSwitch开发一个重要应用是外呼,所谓外呼就拨打真实电话或手机号呼叫,配合语音机器人可以实现智能客服的功能。外呼配置主要是配置外呼服务器,外呼服务器主要指SIP网关,每个外呼服务器就是一个SIP节点,FreeSwitch服务也可以是一个SIP节点。本文主要介绍了FreeSwitch外呼相关配置,主要有外呼配置的模式,包括注册模式和非注册模式网关加载的查看方法拨号中常见的呼出配置和呼入配置如果觉得有些帮助或觉得文章还不错,请关注一下博主,你的关注是我持续写作的动力。............

xiao2macf的专栏 1万+

Spring中AOP环绕通知

文章目录1.业务层接口2.业务层实现类3.日志类4.配置文件 1.业务层接口 public interface AccountService { //模拟保存账户 void saveAccount(); //模拟更新账户 void updateAccount(int i); //模拟删除账户 int deleteAccount(); } 2.业务层...

你今天真好看呀 1433

【报错】raise pickle.UnpicklingError(_get_wo_message(str(e))) from None_pickle.UnpicklingError: Weigh

File "/opt/conda/envs/py_3.12/lib/python3.12/site-packages/torch/serialization.py", line 1470, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed.

静谧、淡雅 786

Spring AOP 五大通知类型

环绕通知(前置部分)前置通知目标方法执行后置通知(方法成功时)异常通知(方法失败时)最终通知环绕通知(后置部分)

m0_62581697的博客 364

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring AOP 超全详解:面向切面编程 + 五大通知类型 + 切入点表达式 + ThreadLocal 实战

本文系统介绍了Spring AOP的核心概念与实战应用。主要内容包括:AOP基础概念及其优势(代码复用、无侵入增强);快速入门方法耗时统计案例;五大核心概念(切面、通知、切入点等);五种通知类型及执行特点;切入点表达式写法与抽取技巧;JoinPoint对象使用;ThreadLocal线程数据隔离应用;操作日志记录实战案例;以及开发中的常见注意事项。AOP通过动态代理实现功能增强,是Spring框架解耦通用逻辑的核心手段,广泛应用于日志、事务、权限等场景。掌握通知类型、切入点表达式和ThreadLocal使用

2601_96029214的博客 597

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何快速上手【Spring AOP】?核心应用实战(上篇)

哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。

2301_81073317的博客 5136

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【SSM框架 | day26 spring AOP与事务管理】

AOP(面向切面编程)是一种将横切逻辑(如日志、事务)与业务逻辑分离的编程范式。其核心概念包括连接点、切入点、通知和切面,通过动态代理实现方法增强。Spring AOP提供5种通知类型,支持XML和注解配置,常用功能包括统一日志、性能监控和声明式事务管理。声明式事务通过@Transactional注解实现,可配置传播行为和隔离级别。开发中需注意AOP失效问题,如自调用、异常捕获等。相比AspectJ,Spring AOP更轻量但功能有限。最佳实践包括精确切入点表达式、保持切面轻量和合理事务配置。掌握AOP能

King_model的博客 813

详解Spring AOP五大通知类型:从零搭建企业级操作日志系统

本文深入解析基于 Spring Boot 与 AOP(面向切面编程)实现统一日志记录的完整流程。针对传统 OOP 开发中日志代码冗余、耦合度高的问题,通过自定义注解 @AopLogText 结合 AspectJ 切面,详细演示了前置、后置、返回、异常及环绕五大通知类型的具体实现代码。文章重点讲解了如何通过注解参数绑定获取业务描述,以及 ProceedingJoinPoint 在环绕通知中的核心应用与注意事项。读者阅读后将掌握如何优雅地剥离非业务逻辑,构建可复用、低耦合的日志模块,提升代码质量与维护效率。

Ahatc的博客 730

Java框架快速入门:Spring AOP核心技术与实战

文章摘要: 本文系统讲解了Spring AOP的核心概念与实战应用,涵盖切入点表达式语法、通配符使用技巧及五种通知类型(如前置通知、环绕通知等)。通过示例项目spring_19_aop_pointcut演示了多种切入点配置方式,并针对业务场景(如性能监测、参数处理)提供实战案例。重点包括:利用AOP实现方法执行效率测量、动态修改参数(如网盘密码兼容处理),以及从通知中获取原始方法参数、返回值和异常信息。最后总结了AOP的核心思想——通过代理模式实现非侵入式功能增强,并强调合理设计切入点表达式的重要性。

Wang的专栏 253

【Spring 进阶】AOP 面向切面编程完整笔记|通知类型、切点表达式、ThreadLocal 实战

本文系统介绍了SpringBoot中AOP的核心概念与应用,主要内容包括: AOP核心概念:连接点、通知、切入点、切面,以及基于动态代理的实现原理 五种通知类型详解(@Before/@After/@Around等),重点说明@环绕通知必须调用proceed() 切入点表达式语法(execution和@annotation),以及@Pointcut复用技巧 多切面执行顺序控制(默认按类名字母排序,可用@Order调整) 实战应用:通过自定义注解+AOP实现操作日志记录 ThreadLocal解决跨层数据传递

daweitianlon的博客 153

【Java EE】Spring AOP :面向切面编程

本文摘要: Spring AOP是面向切面编程思想的实现,无需修改业务代码即可增强方法功能,适用于日志统计、权限校验等场景。文章介绍了AOP的核心概念(切点、连接点、通知、切面)和五种通知类型(@Around/@Before/@After等),并通过统计方法耗时的案例演示了具体实现。Spring AOP通过切点表达式筛选目标方法,利用通知实现增强逻辑,具有代码无侵入、消除重复代码等优势。文中还对比了拦截器与AOP的差异,并展示了@Pointcut复用切点表达式的方法。

记录了从0学习Java技术栈的日常 229

Java27:SPRING

声明式事务是指使用注解或者XML配置的方式来控制的事务的提交和回滚。开发者只需要添加配置即可,具体事务的实现由第三方框架实现,避免我们直接进行事务操作使用声明式事务可以将事务的控制和业务逻辑分离开来,提高代码的可读性和可维护性区别:编程式事务需要手动编写代码来管理事务而声明式事务可以通过配置文件或注解控制事务。

zzx_nihao的博客 1058

详解(Spring Aop,动态代理技术,xml Aop及注解Aop)

Spring AOP AOP介绍 Aop为Aspect Oriented Programming的缩写,面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP作用及其优势 在程序运行期间,在不修改源码的情况下对方法进行功能增

qq_41934990的博客 526

深度解析 Spring AOP:从入门到原理,实战与面试全覆盖

本文全面介绍Spring AOP的核心概念与实践应用。首先阐述AOP的基本概念,将其与拦截器、全局处理进行对比,突出其方法级增强的精细控制优势。通过3步实现方法耗时统计的实战案例,展示快速入门流程。重点讲解5种通知类型、切点表达式、切面优先级等核心功能,并深入剖析JDK动态代理和CGLIB动态代理的底层实现原理。最后提供常见面试题解析,包括AOP与IoC关系、通知执行顺序等高频考点。全文贯穿"无侵入式增强"理念,帮助开发者掌握日志记录、性能监控等横切逻辑的统一管理能力。

2301_79949064的博客 1370

达内-Spring+SpringMVC+MyBatis框架考试复习

第一部分:Spring框架概述、Spring、IOC、单例、多例、依赖注入 文章目录一、 Spring概述+约束引入1 框架概述2 创建的框架3 Spring框架概述4 IOC的入门案例(环境、约束)二、 IOC基本概念和原理1 IOC和DI的概念2 创建IOC的例子3 IOC的实现原理4 IOC获取对象的方式三、 Spring创建对象的方式四、 单例模式和多例模式五、 懒加载六、 Spring容器的初始化和销毁七、 DI依赖注入1 IOC(DI) -- 控制反转(依赖注入)2 通过set方法完成依赖

qq_43611391的博客 2406

Spring Boot AOP 面向切面编程:从原理到实战,一篇就会

Aspect Oriented Programming 面向切面编程。核心思想:把核心业务和通用非业务逻辑分离开。核心业务:用户登录、下单、支付通用逻辑:日志、鉴权、耗时统计、异常处理、事务每个方法都写重复代码业务代码被污染修改麻烦,牵一发动全身耦合度极高无侵入:不修改业务代码复用强:一处编写,多处生效易维护:统一修改,全局生效职责清晰:业务归业务,切面归切面Spring AOP 本质是动态代理,帮我们无侵入增强方法。加 AOP 依赖写切点(匹配哪些方法)

m0_72803309的博客 349
上一篇: jdbcTemplate如何交给spring管理一遍文章让你快速了解
下一篇: 哈希表Google面试上机题手写
来来爱编程
博客等级 码龄7年 375粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值