Spring AOP常见面试题

本文详细介绍了AOP的思想,Spring如何通过execution表达式和@annotation实现AOP,以及其在SpringFramework和SpringBoot中对动态代理的选择策略。重点讲解了在SpringBoot中基于接口和类实现的不同配置情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、对于AOP的理解

二、Spring是如何实现AOP的

1、execution表达式

2、@annotation

3、基于Spring API,通过xml配置的方式。

4、基于代理实现

三、Spring AOP的实现原理

四、Spring是如何选择使用哪种动态代理

1、Spring Framework

2、Spring Boot

五、基于Spring Boot观察动态代理

1、类实现接口且未配置

2、类未实现接口且未配置

3、类实现接口且配置

4、类未实现接口且配置

一、对于AOP的理解

AOP是一种思想,是对一类事情集中处理。比如:对于一个项目中的不同方法,想计算每个方法运行消耗时间,若在每个方法体里实现一遍计算时间,代码不断重复。此时,我们就可以利用AOP思想集中计算时间。

二、Spring是如何实现AOP的

Spring实现AOP有两种实现方式:execution表达式和@annotation

1、execution表达式

例如:execution(public String com.example.demo.Controller.testController())

2、@annotation

(1)实现步骤

①编写自定义注解;

②使用@annotation表达式来描述切点表达式;

③在连接点的方法上加上自定义注解。

3、基于Spring API,通过xml配置的方式。
4、基于代理实现

三、Spring AOP的实现原理

Spring AOP是基于动态代理实现的,常见的实现方式:JDK动态代理和CGLIB动态代理。

四、Spring是如何选择使用哪种动态代理

1、Spring Framework

如果代理的是接口,使用JDK动态代理。如果代理的是没有实现接口的类,使用CGLIB动态代理。</

Spring AOP是一种面向切面编程的技术,它的设计原理是基于动态代理和反射机制。在Spring AOP中,关注点是指程序中的横切逻辑,而横切关注点是指被关注点穿插进来的代码逻辑。 在Spring AOP中,主要有两种关注点的实现方式:基于AspectJ的实现和基于Spring AOP的实现。AspectJ是一个独立的AOP框架,可以在编译期或运行期织入切面。而Spring AOPSpring框架提供的AOP实现,它使用动态代理来实现切面的织入。 在Spring AOP中,关注点和横切关注点的不同在于: - 关注点是程序中需要关注的特定功能或行为,比如日志记录、权限控制等。它可以被多个横切关注点所使用。 - 横切关注点是指与关注点相关的代码逻辑,在Spring AOP中,它被定义为切面中的通知(advice)。横切关注点在程序执行过程中被织入到关注点中。 Spring AOP的工作流程如下: 1. Spring首先创建IOC容器,并扫描被@Service和@Component修饰的类,将它们创建为对象并放入IOC容器中。 2. 接下来,Spring寻找由@Aspect修饰的切面类,并获取切面类中的所有方法。 3. Spring进一步寻找切面类中带有合法表达式的方法。 4. 然后,Spring检查扫描到的所有类,并将找到的方法与这些类进行对照,找出有这些方法的类(即被代理类)。 5. 最后,Spring根据找到的被代理类和切面类创建动态类的动态对象,并将它们放入IOC容器中。 除了以上提到的基于AspectJ和Spring AOP的实现,还有其他一些AOP框架,如JBoss AOP等,在Java中也可以用来实现AOP的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring AOP见面试题整理](https://blog.csdn.net/weixin_39309402/article/details/100877521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [springAOP面试题](https://blog.csdn.net/m0_54705036/article/details/123420385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ambition…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值