被面试官问烂的Spring AOP原理,你是怎么答的?

简介: Spring AOP在Spring体系中深不可测,Spring AOP原理也是经常在互联网大厂面试时被问到,今天,我给大家抽丝剥茧,详细到你无法想象。我划分为四个阶段给大家介绍:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段。

**往期视频已整理成文档形式,需要的可S我免费领取**


Spring AOP在Spring体系中深不可测,Spring AOP原理也是经常在互联网大厂面试时被问到,今天,我给大家抽丝剥茧,详细到你无法想象。我划分为四个阶段给大家介绍:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段。

d81eafc704734790bddd22ae1a61b6d5.png

我整理了一张完整的Spring AOP设计原理UML图,需要高清图的小伙伴可以私信我。

f47f9dcd12a0484f829da2ed569eba20.png

下面详细介绍每个阶段的执行细节。


1、第一阶段:创建代理对象阶段

在Spring中,创建Bean实例都是从getBean()方法开始的(出现getBean()动画),在实例创建之后,Spring容器将根据AOP的配置去匹配目标类的类名,看目标类的类名是否满足切面规则。如果满足满足切面规则,就会调用ProxyFactory创建代理Bean并缓存到IoC容器中。(出现调用ProxyFactory创建代理Bean动画)根据目标对象的自动选择不同的代理策略。(出现选择代理策略动画)如果目标类实现了接口,Spring会默认选择JDK Proxy,如果目标类没有实现接口,Spring会默认选择Cglib Proxy,当然,我们也可以通过配置强制使用Cglib Proxy。

d0fdb91303b24ac89e8da1c1147ab7af.png

2、第二阶段:拦截目标对象阶段

当用户调用目标对象的某个方法时,(出现AopProxy对象拦截)将会被一个叫做AopProxy的对象拦截,Spring将所有的调用策略封装到了这个对象中,它默认实现了InvocationHandler接口,也就是调用代理对象的外层拦截器。(出现调用InvocationHandler的invoke()方法动画)在这个接口的invoke()方法中,(出现触发MethodInvocation的proceed()方法动画)会触发MethodInvocation的proceed()方法。在这个方法中会按顺序执行符合所有AOP拦截规则的拦截器链。

610b5b12d0e64626a4a7a0c3191584f5.png

3、第三阶段:调用代理对象阶段

Spring AOP拦截器链中的每个元素被命名为MethodInterceptor,(出现反射调用Advice对象

动画)其实就是切面配置中的Advice通知。这个回调通知可以简单地理解为是新生成的代理Bean中的方法。(出现执行织入代码动画)也就是我们常说的被织入的代码片段,这些被织入的代码片段会在这个阶段执行。

ef9ef92397f3477c927646c915d6c312.png

4、第四阶段:调用目标对象阶段

MethodInterceptor接口也有一个invoke()方法,(出现执行MethodInterceptor的invoke()方法动画)在MethodInterceptor的invoke()方法中会触发对目标对象方法的调用,也就是反射调用目标对象的方法。(出现调用目标对象动画)

c59e2436c94a45c0a6eccb67c2830f90.png

Spring AOP原理就分析到这里,最后,总结一下不迷路:

(出现代理对象动画)

1、代理对象:就是由Spring代理策略生成的对象;

(出现目标对象动画)

2、目标对象:就是我们自己写的业务代码;

(出现织入代码动画)

3、织入代码:就是要在我们自己写的业务代码增加的代码片段;

(出现切面通知动画)

4、切面通知:就是封装织入代码片段的回调方法;

(出现MethodInvocation动画)

5、MethodInvocation:负责执行拦截器链,在proceed()方法中执行;

(出现MethodInterceptor动画)

6、MethodInterceptor:负责执行织入的代码片段,在invoke()方法中执行。

2c33a06e3f724a6891c4a718b7b84095.png

都看到这里了,你还觉得Spirng AOP原理难吗?我再送给大家一张精简版的Spring AOP执行流程图,需要的小伙伴立马关注点个赞。

37301070a1d1417a97d424cc8f3e1206.png

我是被编程耽误的文艺Tom,如果大家还有其他疑问,可以在评论区留言。如果本次面试解析对你有帮助,请动动手指一键三连分享给更多的人。关注我,面试不再难!


往期视频已经整理成文档形式,需要的小伙伴可S我,海量干货免费领!只弹干货不参水!

相关文章
|
8天前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
5天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
19 2
|
5天前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
16 0
|
10天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
10天前
|
存储 安全 Java
面试高频:Synchronized 原理,建议收藏备用 !
本文详解Synchronized原理,包括其作用、使用方式、底层实现及锁升级机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
面试高频:Synchronized 原理,建议收藏备用 !
|
11天前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
1月前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
37 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
16天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
12天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
25 0
|
1月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?