IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Spring

Spring AOP/IOC实现原理

时间:2024-01-09 15:57:33 来源:IT袋 作者:马勇
导读:Spring,正文核心介绍:Spring的内容,一起跟随小编看看吧! AOP 什么是AOP 通俗的讲就是当你想要实现对象增强,就可以使用AOP。 不然的话还需要自己创建代理,AOP就是为了解决

Spring

正文核心介绍:Spring的内容,一起跟随小编看看吧!

AOP

什么是AOP

通俗的讲就是当你想要实现对象增强,就可以使用AOP。

不然的话还需要自己创建代理,AOP就是为了解决 非业务代码抽取 的问题。

它的底层技术实现是动态代理,在Spring内实现依赖的是BeanPostProcessor。

AOP在Spring中的几种实现方式

一共有4种方式:

  • 注解
  • XML
  • JavaConfig
  • 基于Groovy DSL配置

一般在实际应用中,主要是注解、XML,少部分会用JavaConfig。

比如常见的业务代码使用注解定义各种对象,责任链这种一般有的会配置定义在XML。

注解解决不了的就会用JavaConfig。

不同版本Spring的AOP执行顺序

Spring AOP常用的注解:

  • @Before 前置通知:目标方法之前执行
  • @After 后置通知:目标方法之后执行
  • @AfterReturning 返回后通知:执行方法结束前执行(异常不执行)
  • @AfterThrowing 异常通知:出现异常时执行
  • @Around 环绕通知:环绕目标方法执行

Spring4 下AOP的执行顺序:

正常情况:@Before前置通知 -> @After后置通知 -> @AfterReturning正常返回 异常情况:@Before前置通知 -> @After后置通知 -> @AfterThrowing方法异常

Spring5 下AOP的执行顺序:

正常情况:@Before前置通知 -> @AfterReturning正常返回 -> @After后置通知 异常情况:@Before前置通知 -> @AfterThrowing异常通知 -> @After后置通知

Spring AOP实现原理

Spring AOP是通过代理模式实现的

具体有两种实现方式,一种是基于Java原生的动态代理,一种是基于cglig的动态代理。

对应的代码实现分别是:CglibAopProxyJdkDynamicAopProxy

  • 同时Spring AOP默认使用的是JDK动态代理进行AOP代理。这使得任何接口都可以被代理。但是JDK动态代理有一个缺点,就是不能代理没有接口的类。所以Spring AOP使用CGLIB代理没有接口的类
  • 但是要注意Spring Boot在2.x版本后默认使用的是CGLIB动态代理了。具体原因是为了解决使用JDK代理可能导致的类型转化异常而使用CGLIB。当然也可以通过参数spring.aop.proxy-target-class=false进行修改

为什么SpringBoot默认使用CGLIB作为代理的实现方式呢?

我觉得可以从两个切入点聊一聊这个事:一是兼容性,另外就是性能

  • 兼容性:

CGLIB动态代理可以适用于任何类型的目标类,无论它是否实现了接口。

而JDK动态代理只能适用于实现了接口的目标类。

相关阅读

  • 二阶段提交的优缺点有哪些? 二阶段提交的利弊分析

    二阶段提交的优缺点有哪些? 二阶段提交的利弊分析

    这些知识你了解吗?二阶段提交的优缺点有哪些的电脑方面的小经验,接下来小编为网友介绍。 二阶段提交协议(Two-phase commit protocol),简称 2PC。 两阶段提交是一种强一致性事务协议,它分

  • SSL协议是什么 SSL协议是什么协议

    SSL协议是什么 SSL协议是什么协议

    你是不是想知道SSL协议是什么的相关知识,SSL协议是一种加密网络通信安全协议,是Web浏览器与Web服务器之间安全交换信息的协议,具有数据加密、完整性校验及身份验证功能,保障网络数据传

  • OSPF协议有哪些基本特征 什么是OSPF协议

    OSPF协议有哪些基本特征 什么是OSPF协议

    IT袋网网小编为你介绍OSPF协议有哪些基本特征的内容,下面来一起了解一下吧。 OSPF(Open Shortest Path First,开发最短链路优先)作为一种内部网关协议(Interior Gateway Protocl,IGP),用于在同一个自

  • 线程的五种状态 五种线程状态:了解并管理线程的状态转换

    线程的五种状态 五种线程状态:了解并管理线程的状态转换

    为大家介绍的是线程的五种状态的电脑小知识,接下来IT袋网小编就来介绍。 五种状态的说法来自于操作系统层面的划分 运行态 :分到 cpu 时间,能真正执行线程内代码的 就绪态 :有资格分