Spring AOP 原理

面试题简述

Spring AOP 的原理是什么?

面试官想听的

1、Spring 是如何通过代理机制在运行时增强方法;

2、为什么有的类用 JDK 动态代理,有的用 CGLIB;

3、AOP 的执行链路大致如何。

面试示例回答

Spring AOP 的核心原理是通过动态代理机制在运行时生成代理对象,从而在不修改原有代码的情况下对方法进行增强。

当容器启动时,Spring 会解析所有的切面类(带有 @Aspect 注解的类),通过 AnnotationAwareAspectJAutoProxyCreator 这样的后置处理器介入 Bean 创建流程。

详情请参考:http://xhslink.com/o/4vWqeqHnkL1

由浅入深分析

1、AOP 实现的关键在于 BeanPostProcessor:AnnotationAwareAspectJAutoProxyCreator 会在 Bean 初始化前后检查是否需要代理,并创建代理对象。

2、动态代理与 CGLIB 区别:

(1)JDK 代理基于接口;

(2)CGLIB 基于继承目标类,生成子类覆盖方法实现增强。

3、调用链结构:Spring 内部维护一个 MethodInterceptor 链,每个切面对应一个拦截器,按顺序执行形成调用链。

4、织入时机:Bean 初始化完成后,在返回 Bean 实例之前由 AOP 创建代理完成织入。

面试加分点

1、能提到 AnnotationAwareAspectJAutoProxyCreator 是关键切入点;

2、能说明两种代理方式的区别和选择原则;

3、如果能够举一些 AOP 典型应用的例子,比如提到事务、日志、权限等,将会是大大的加分项;

#春招##实习##后端开发##算法##秋招#
2025八股文复盘 文章被收录于专栏

带你复盘2025大厂八股文面试,拆解面试官到底想听啥

全部评论

相关推荐

01-11 12:43
门头沟学院 Java
一面30min左右自我介绍+项目全流程讲解 5min左右项目提问10min左右(只能回忆一部分)1.在与大模型的交互中,通常采用的是SSE 协议,为什么要在项目中使用IM来进行通讯?2.分布式ID高性能改造,做了那些方面的性能优化?3.消息推送平台中数据存储的设计?八股15min1.分布式锁?分布式锁要解决那些问题?2.数据一致性解决方案中,延迟双删的问题?3.新建一个线程池要指定哪些参数?整个运行过程?4.核心线程数量,还有最大线程数量,还有一个是工作队列。但是工作队列我们一般都会去选择有界的,很少去选择无界的这个队列。基于这三个参数的这个大小,我们应该怎么去评估?5.队列的大小应该怎么去设置?6.HashMap扩容流程7.索引失效有哪些场景?8.类型转换为什么会失效?9.RocketMQ中的事务消息原理?场景题5min左右1在不使用RoctetMQ本身提供的这一套机制的话,我们自身有没有什么其他的方案能够避免这种问题?二面30min左右(已挂)1.gap一年在做什么?2.讲一下项目中的两个点亮,如何设计,碰到的问题,怎么解决的?3.Object中有两个方法,一个是 equals,一个是 hashCode。一般是重写了equals,单身通常是要重写hashCode,为什么?4.写Java代码的时候,打交道最多的,一个是 JDK, 一个是Spring?讲一下在哪个地方见到用到了什么样的设计模式。5.MySQL的索引默认Innodb引擎,为什么?6.数据库的隔离级别7.如果开发的应用程序上线之后,突然出现CPU猛涨的情况,如何去查?8.双栈实现一个队列,口述思路。
查看22道真题和解析
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务