首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么@AfterReturning只在@AfterThrowing异常后执行?

@AfterReturning是Spring框架中的一个注解,用于在方法执行成功并返回结果后执行一些操作。它通常与@AfterThrowing注解一起使用,用于在方法抛出异常后执行一些操作。

@AfterReturning注解的执行顺序是在方法返回结果后执行,而@AfterThrowing注解的执行顺序是在方法抛出异常后执行。这是因为在方法执行成功并返回结果后,@AfterReturning注解提供了一个机会来处理返回结果,例如日志记录、缓存更新等操作。而在方法抛出异常后,@AfterThrowing注解提供了一个机会来处理异常情况,例如异常日志记录、异常处理等操作。

这种设计可以使开发人员更加灵活地处理方法的返回结果和异常情况。通过使用@AfterReturning和@AfterThrowing注解,开发人员可以根据实际需求来选择执行相应的操作,从而提高代码的可维护性和可扩展性。

在云计算领域中,@AfterReturning注解可以应用于各种场景,例如在处理请求后更新缓存、记录请求日志、发送通知等。对于云原生应用,可以使用腾讯云的云原生产品来实现相关功能,例如腾讯云的云原生数据库TencentDB、云原生日志服务CLS等。

总结起来,@AfterReturning注解在方法返回结果后执行,用于处理返回结果;@AfterThrowing注解在方法抛出异常后执行,用于处理异常情况。这两个注解可以帮助开发人员更好地处理方法的返回结果和异常情况,提高代码的可维护性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面向切面的Spring

写在前面   本文是博主在看完面向切面的Spring(《Spring实战》第4章)的一些实践笔记。   为什么要用AOP呢?...简单点来说,就是AOP执行时会调用的方法,通知除了定义切面要完成的工作(What),还会定位什么时候(When)去履行这项工作,是方法调用前,还是调用之后,还是前后都是,还是抛出异常切面定义中...AfterThrowing 将通知放置在被通知的方法抛出异常之后 Around 通知包裹在被通知的方法的周围,方法调用之前和之后发出(环绕通知 = 前置 + 目标方法执行 + 后置通知) 切点,也叫切入点...、之后或者抛出异常时干点什么,那么就用切入点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法 连接点,也叫参加点(JoinPoint)   连接点是切面应用程序执行过程中插入的地方,可能是方法调用...(前、)的时候,也可能是异常抛出的时候。

44010
  • Spring的核心思想,总结得非常好!

    我们的代码清单中,创建对象和设置依赖关系的main方法适用与当前的情况,而Spring的IOC容器能适用与任何情况 通常,Spring的依赖关系由XML表示,IOC容器解析XML完成对象的创建和依赖注入...面向切面编程能实现不改变原有代码的前提下动态的对功能进行增强, 比如说一个方法执行前或执行做某些事情如记录日志、计算运行时间等等。...@Before注解 @Before注解修饰的方法会在被增强的方法执行前被执行 @After注解 @After注解修饰的方法会在被增强的方法执行执行 @AfterReturning注解 @AfterReturning...注解修饰的方法会在被增强的方法执行执行,但前提是被修饰的方法顺利执行结束,假如方法中途抛出异常,那么AfterReturning注解修饰的方法将不会被执行,而After注解修饰的方法是无论如何都会被执行...@AfterThrowing注解 @AfterThrowing注解修饰的方法会在被增强的方法执行出错抛出异常的情况下被执行

    44920

    SpringBoot中实践AOP编程

    @Around(环绕通知:目标方法执行前和返回执行) // 4. @AfterReturning(返回通知:目标方法正常返回执行) // 5....@AfterThrowing异常通知:目标方法抛出异常执行) // 前置通知:目标方法执行执行 @Before("pointcutSample()") public void...// 环绕通知执行:目标方法执行前和返回执行 // 注意: // 1.环绕通知中一定要返回目标方法的返回值,否则客户端就无法接收到结果啦 // 2.如果在环绕通知中捕获了目标方法执行时抛出的异常...3.如果使用了@ControllerAdvice实现全局异常拦截,同时也定义了异常通知@AfterThrowing,那么异常通知@AfterThrowing将在@ControllerAdvice之前得到执行...AfterReturning通知中还可以获取目标方法的返回值,@AfterThrowing通知中可以获取目标方法抛出的异常

    26320

    SpringAOP

    核心概念 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等 SpringAOP中,理解为方法的执行 切入点(Pointcut):匹配连接点的式子 SpringAOP...,因此环绕通知方法必须抛出Throwable对象 环绕通知中可以对原始方法调用过程中出现的异常进行处理 返回通知(了解) 名称:@AfterReturning 类型:方法注解 位置:通知方法定义上方...作用:设置当前通知方法与切入点之间的绑定关系,当前通知方法原始切入点方法正常执行完毕运行 示例: @AfterReturning("pt()") public void afterReturning...) 名称:@AfterThrowing 类型:方法注解 位置:通知方法定义上方 作用:设置当前通知方法与切入点之间的绑定关系,当前通知方法原始切入点方法运行抛出异常执行 示例: @AfterThrowing...获取异常 获取切入点方法运行异常信息 抛出异常通知 @AfterThrowing(value = "pt()", throwing = "e") public void afterThrowing(JoinPoint

    17210

    浅谈Android面向切面编程(AOP)

    连接点(JoinPoint):允许你通知(Advice)的地方,那可就真多了,基本每个方法的前、(两者都有也行),或抛出异常是时都可以是连接点(spring支持方法连接点)。...,切点前后执行 @After(切点表达式):后置通知,切点之后执行 @AfterReturning(切点表达式):返回通知,切点方法返回结果之后执行 @AfterThrowing(切点表达式):异常通知...,切点抛出异常执行 @Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing需要在切面类中使用,即在使用@Aspect的类中。...但@AfterReturning通知反而不执行了,原因很简单,都抛出异常了,切点肯定是不能返回结果的。...()来确定切点已经执行,故joinPoint.proceed()之前的代码会在切点执行执行joinPoint.proceed()之后的代码会切点执行执行

    87020

    【小家Spring】面向切面编程之---Spring AOP的原理讲解以及源码分析(Cannot find current proxy: Set exposeProxy property on )

    ("this is from HelloAspect#afterThrowing..."); } // 此处需要注意:若写了@Around方法,那么最后只会执行@Around和@AfterReturning...: @Aspect、@Before、@After、@AfterReturning、@AfterThrowing、@Around 其余的注解Spring都是不予解析的(由AspectJ内部技术去解析)...}catch(){ //@AfterThrowing } 它俩得执行时机不同,@After先执行,@AfterReturning执行 @AfterReturning它能拿到目标方法执行完的返回值...,但是@After不行 @After它在finnaly里面,所以它不管怎么样都会执行(哪怕目标方法抛出异常),但是@AfterReturning如国目标方法没有正常return(比如抛出异常了),它是不会执行的...环绕通知 @Around 相当于 MethodInterceptor 抛出通知 @AfterThrowing 相当于 ThrowAdvice 最终通知 @After 不管是否异常,该通知都会执行 引介增强

    2.2K30

    用心整理 | Spring AOP 干货文章,图文并茂,附带 AOP 示例 ~

    一、为什么要使用 AOP ? 实际的开发过程中,我们的应用程序会被分为很多层。...advice):目标方法执行成功,调用通知 异常通知(After throwing advice):目标方法抛出异常执行通知 后置通知(After advice):目标方法完成(不管是抛出异常还是执行成功...)执行通知 2、JoinPoint(连接点) 就是 Spring 允许你放通知(Advice)的地方,很多,基本每个方法的前、(两者都有也行)或抛出异常时都可以是连接点,Spring 支持方法连接点...@After("HandleResult()") public void doAfter() { log.info("doAfter..."); } @AfterReturning切点正常执行...", t.desc(), new Gson().toJson(res)); } @AfterThrowing切点抛出异常执行该方法。

    1K21

    Spring的AOP面向切面 知识点速查

    spring中是指方法,因为spring支持方法类型的连接点。 pointcut(切入点):对哪些joinpoint进行拦截 advice(通知/增强):拦截到的jionpoint所做的事情。...前置通知 后置通知 异常通知(抛出异常) 最终通知(无论如何都执行) 环绕通知(方法执行的前后都通知,甚至可以阻止目标方法执行) introduction(引介):特殊的通知,类层面的。...,不提供属性的连接点 AspectJ用法 通知类型 @Before 前置通知 @AfterReturning 后置通知 @Around 环绕通知 @AfterThrowing 异常抛出通知 @After...System.out.println("环绕通知") return obj; } 异常通知 @AfterThrowing(value="execution(* top.linxz.java.UserDao...,throwing="e") public void afterThrowing(Throwable e){ } 最终通知,无论如何即使有异常执行 @After(value="execution(*

    53320

    Spring通知(Advice)有哪些类型?

    (1)前置通知(Before Advice):连接点(Join point)之前执行的通知。...环绕通知可以方法调用前后完成自定义的行为。它也可以选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。...(4)返回通知(AfterReturning Advice):连接点正常完成执行的通知(如果连接点抛出异常,则不执行) (5)抛出异常通知(AfterThrowing advice):方法抛出异常退出时执行的通知...around after advice after advice afterReturning (2)有异常情况下的执行顺序: around before advice before advice...target method 执行 around after advice after advice afterThrowing java.lang.RuntimeException: 异常发生

    80040

    14. AOP配置管理

    ,类似于代码 1 或者代码 2 添加内容 (2)后置通知,追加功能到方法执行,不管方法执行的过程中有没有抛出异常都会执行,类似于代码 5 添加内容 (3)返回通知,追加功能到方法执行,只有方法正常执行结束才进行...,类似于代码 3 添加内容,如果方法执行抛出异常,返回通知将不会被添加 (4)抛出异常通知,追加功能到方法抛出异常,只有方法执行异常才进行,类似于代码 4 添加内容,只有方法抛出异常才会被添加...} } ‍ 注意:返回通知是需要在原始方法select​ 正常执行才会被执行,如果select()​ 方法执行的过程中出现了异常,那么返回通知是不会被执行。...} } ‍ 注意:异常通知是需要原始方法抛出异常,可以select()​ 方法中添加一行代码int i = 1/0​ 即可。...位置 通知方法定义上方 作用 设置当前通知方法与切入点之间绑定关系,当前通知方法原始切入点方法正常执行完毕执行 知识点 3:@AfterThrowing 名称 @AfterThrowing 类型

    17410

    Spring-AOP

    AOP相关术语 术语 中文 描述 Joinpoint 连接点 指那些被拦截到的点.Spring中,这些点指方法(因为Spring支持方法类型的连接点)....通知 接口 描述 前置通知 MethodBeforeAdvice 目标方法执行前实施增强 后置通知 AfterReturningAdvice …执行实施增强 环绕通知 MethodInterceptor.....执行前后实施增强 异常抛出通知 ThrowsAdvice …抛出异常实施增强 引介通知 IntroductionInterceptor 目标类中添加新的方法和属性(少用) 添加Spring的...; 前置通知默认不能阻止目标方法执行(但如果通知抛出异常,则目标方法无法执行); 可以通过JoinPoint参数获得当前拦截对象和方法等信息....小结 通知 描述 前置通知 权限控制(少用) 后置通知 少用 环绕通知 权限控制/性能监控/缓存实现/事务管理 异常通知 发生异常,记录错误日志 最终通知 释放资源

    1.2K80

    Spring学习笔记(三) --- Spring AOP

    2、为什么学习AOP? 可以不修改源码的情况下对程序进行增强,AOP可以进行权限校验,日志记录,性能监控,事务控制....spring中,这些点指的是方法,因为spring支持方法类型的连接点. Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义....就产生一个结果代理类 Aspect(切面): 是切入点和通知(引介)的结合 通知类型: 前置通知 :目标方法执行之前执行....后置通知 :目标方法执行之后执行 环绕通知 :目标方法执行前和执行执行 异常抛出通知:目标方法执行出现 异常的时候 执行 最终通知 :无论目标方法是否出现异常 最终通知都会 执行. 5、切入点表达式...=========="); return obj; } @AfterThrowing("MyAspectAnno.pointcut4()") public void afterThrowing

    30630

    Spring AOP详细介绍

    特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around (4)Pointcut(切入点):就是带有通知的连接点,程序中主要体现为书写切入点表达式...:目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可 (2)AfterReturning:目标方法正常完成做增强,@AfterReturning除了指定切入点表达式,还可以指定一个返回值形参名...returning,代表目标方法的返回值 (3)AfterThrowing:主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式,还可以指定一个throwing的返回值形参名...,可以通过该形参名 来访问目标方法中所抛出的异常对象 (4)After:目标方法完成之后做增强,无论目标方法时候成功完成。...4.通知执行的优先级 进入目标方法时,先织入Around,再织入Before,退出目标方法时,先织入Around,再织入AfterReturning,最后才织入After。

    44830

    Spring高手之路19——Spring AOP注解指南

    如果两者不匹配,Spring启动时会抛出异常,因为它无法将返回值绑定到切面方法的参数。 @AfterThrowing异常通知) 异常通知目标方法抛出异常执行,允许访问抛出的异常。...如果目标方法执行成功,记录执行的消息并返回结果。如果在执行过程中发生异常控制台上打印出异常信息,然后重新抛出这个异常。...这样做可以确保异常不会被吞没,而是可以被上层调用者捕获或由其他异常通知处理。 @AfterThrowing注解标明这个通知只有目标方法因为异常而终止时才会执行。...@AfterReturning 通知只有目标方法成功执行并正常返回才会被触发,这个通知可以访问方法的返回值。...环绕通知结束 (@Around): 在所有其他通知执行完毕,环绕通知的结束部分被执行。这可以用于执行清理工作,或者方法执行修改返回值。 返回结果: 最终,AOP代理将处理的结果返回给客户端。

    39310
    领券