Spring的五大通知类型详解

1.前置通知

在目标方法执行之前执行执行的通知。

前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该对象可以获取目标对象 和 目标方法相关的信息。

注意,如果接收JoinPoint,必须保证其为方法的第一个参数,否则报错

配置方法:

2.环绕通知

在目标方法执行之前和之后都可以执行额外代码的通知。

在环绕通知中必须显式的调用目标方法,否则目标方法不会执行

这个显式调用是通过ProceedingJoinPoint来实现的,可以在环绕通知中接收一个此类型的形参,spring容器会自动将该对象传入,这个参数必须处在环绕通知的第一个形参位置。

**ProceedingJoinPoint时JoinPoint的子类,要注意,只有环绕通知可以接收ProceedingJoinPoint,而其他通知只能接收JoinPoint。

配置方式:

环绕通知需要返回返回值,否则真正调用者将拿不到返回值,只能得到一个null。

环绕通知有以下能力

  • 控制目标方法是否执行
  • 目标方法执行之前或之后执行额外代码
  • 控制是否返回返回值
  • 改变返回值

环绕通知虽然有这样的能力,但一定要慎用(因为在里面可以修改方法的返回值等信息),要小心不要破坏了软件分层的“高内聚 低耦合”的目标。

3.后置通知

在目标方法执行之后成功执行的通知。

在后置通知中也可以选择性的接收一个JoinPoint来获取连接点的额外信息,但是这个参数必须处在参数列表的第一个。

在后置通知中,还可以通过配置获取目标方法的返回值

 

 

一定要保证JoinPoint处在参数列表的第一位,否则抛异常

 4.异常通知

在目标方法抛出异常时执行的通知

配置方法

可以配置传入JoinPoint获取目标对象和目标方法相关信息,但必须处在参数列表第一位

另外,还可以配置参数,让异常通知接收到目标方法抛出的异常对象

 5.最终通知

是在目标方法执行之后执行的通知。和后置通知不同之处在于,后置通知是在方法正常返回后执行的通知,如果方法没有正常返-例如抛出异常,则后置通知不会执行。而最终通知无论如何都会在目标方法调用过后执行,即使目标方法没有正常的执行完成。另外,后置通知可以通过配置得到返回值,而最终通知无法得到。

配置方式:

最终通知也可以额外接收一个JoinPoint参数,来获取目标对象和目标方法相关信息,但一定要保证必须是第一个参数。

6.五种通知执行位置

7.五种通知执行的顺序

 7.1在目标方法没有抛出异常的情况下

*前置通知*

*环绕通知的调用目标方法之前的代码*//取决于配置顺序

目标方法

*环绕通知的调用目标方法之后的代码*

*后置通知

*最终通知//取决于配置顺序

7.2在目标方法抛出异常的情况下

*前置通知*

*环绕通知的调用目标方法之前的代码*//取决于配置顺序

目标方法 抛出异常

*异常通知*

*最终通知*//取决于配置顺序

7.3如果存在多个切面

 多切面执行时,采用了责任链设计模式

切面的配置顺序决定了切面的执行顺序,多个切面执行的过程,类似于方法调用的过程,在环绕通知的proceed()执行时,去执行下一个切面或如果没有下一个切面执行目标方法,从而达成了如下的执行过程:

如果目标方法抛出异常

 8.五种通知的常见使用场景

前置通知

记录日志(方法将被调用)

环绕通知

控制事务 权限控制

后置通知

记录日志(方法已经成功调用)

异常通知

异常处理 控制事务

最终通知

记录日志(方法已经调用,但不一定成功)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud 是一个基于 Spring Boot 的开发工具集,它为构建分布式系统提供了一系列的解决方案。在 Spring Cloud 中,有五个核心组件,它们分别是: 1. 服务注册与发现(Eureka):Eureka 提供了服务注册与发现的功能,允许微服务在注册中心注册自己的信息,并通过查询来发现其他服务的位置。服务提供者在启动时将自己的信息注册到 Eureka 服务器,服务消费者可以从 Eureka 服务器上获取到可用的服务列表。 2. 客户端负载均衡(Ribbon):Ribbon 是一个客户端负载均衡器,它可以在多个服务提供者之间进行负载均衡,实现求的分发。Ribbon 提供了多种负载均衡策略,如轮询、随机等,并且可以根据具体的业务需求进行自定义。 3. 服务调用(Feign):Feign 是一个声明式的 HTTP 客户端,它简化了微服务之间的调用。通过使用注解,开发者可以定义接口和方法,并通过 Feign 自动生成具体的实现,从而实现服务之间的调用。Feign 还集成了 Ribbon,可以实现负载均衡的功能。 4. 熔断器(Hystrix):Hystrix 是一个容错和熔断器组件,它可以防止分布式系统中的故障扩散,提高系统的稳定性和容错能力。Hystrix 可以监控微服务之间的调用情况,并在出现故障时进行熔断,从而避免故障的传播。 5. 网关(Zuul):Zuul 是一个微服务网关,它可以实现求的路由、过滤和负载均衡等功能。通过配置不同的路由规则,Zuul 可以将求转发给对应的微服务,实现求的统一入口和出口。同时,Zuul 还支持自定义的过滤器,可以在求被路由前后进行一些额外的处理。 这五个组件是 Spring Cloud 构建微服务架构的关键组件,它们协同工作,提供了一套完整的解决方案,方便开发者构建和管理分布式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值