Spring AOP原理的常见面试题

.

在这里插入图片描述

Spring AOP是怎么实现的

答:Spring AOP是通过动态代理来实现AOP的

什么是代理模式

答:代理模式也被称为委托模式
那么什么是代理模式呢?
为其他对象提供一种代理用来控制这个对象的访问,他的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标进行调用,而是提供代理类来间接调用.
作用场景:
在一些特定情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用.
举例:
我们通常情况下的租房,一般是不能直接与房东沟通的,而是通过中介来进行处理租房的相关业务.
代理模式的主要角色:
Subject:业务接口类,可以是抽象类或者接口(定义一些功能,比如租房,买房,交水电费等)
Realsubject:业务实现类,具体的业务执行,也就是被代理对象(房东,继承自subject,以实现父类具有的功能)
Proxy:代理类,也就是代理(中介,同样是继承自subject,以实现父类具有的功能)

在这里插入图片描述
代理模式可以在不修改代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强
根据代理的创建时期,代理模式分为静态代理和动态代理

静态代理

静态代理: 由程序员创建代理类或特定工具自动生成源代码再对其编译, 在程序运行前代理类的 .class 文件就已经存在了(在出租房子之前,中介就已经做好了相关的工作,就等租户来租房子了)

动态代理怎么实现的

动态代理: 在程序运行时, 运用反射机制动态创建而成,这里spring提供了两种实现方法:JDK,CGLIB.

JDK动态代理实现接口

JDK动态生成代理的实现步骤(采用反射调用目标类)
1.自定义InvocationHandler并重写invoke方法,在invoke方法中我们会调用目标方法并自定义一些处理逻辑
2.通过Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)方法创建对象

CGLIB动态代理继承目标类

通过子类调用父类的方式调用目标类
1.自定义 MethodInterceptor并重写intercept方法,其余同JDK
2.调用Enhancer.create()方法来生成一个代理对象

引入依赖

<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>

JDK与CJLIB的区别

JDK只能实现接口,不能实现类
CJLIB既可以实现接口,也可以实现类

什么时候使用JDK与CJLIB

spring默认使用jdk,spring boot默认使用cjlb
这个可以提够设置来改变proxyTargetClass这个属性来实现,默认值为false.

proxyTargetClass目标对象代理方式
false实现了接口jdk代理
false未实现接口(只有实现类)cglib代理
true实现了接口cglib代理
true未实现接口(只有实现类)cglib代理

可以通过 @EnableAspectJAutoProxy(proxyTargetClass = true) 来设置
注意:
Spring Boot 2.X开始, 默认使用CGLIB代理
可以通过配置项 spring.aop.proxy-target-class=false 来进行修改,设置默认为jdk代理
SpringBoot设置 @EnableAspectJAutoProxy 无效, 因为Spring Boot 默认使用
AopAutoConfiguration进行装配

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当谈到Spring框架的面试题时,Spring AOP和IOC是两个常见的话题。下面是一些可能的面试问题和答案: 1. 什么是Spring AOPSpring AOP是一种基于面向切面编程(AOP)的技术,它允许开发人员在应用程序中定义横切关注点,并将它们与应用程序的业务逻辑相分离。通过将这些横切关注点(例如日志记录、事务管理等)从核心业务逻辑中提取出来,可以实现更好的模块化和可维护性。 2. Spring AOP的工作原理是什么? Spring AOP通过使用代理模式在运行时为目标对象动态地创建代理对象来实现横切关注点的功能。当调用目标方法时,代理对象会在执行前、执行后或异常发生时插入相关的横切逻辑。 3. Spring IOC是什么意思? Spring IOC(控制反转)是一种设计模式,它将对象的创建和依赖关系的管理从应用程序代码中解耦出来,交由框架来完成。通过IOC容器,可以通过配置文件或注解方式来定义对象之间的依赖关系,Spring容器负责创建、装配和管理这些对象。 4. Spring IOC的优势是什么? 使用Spring IOC可以实现松耦合的设计,从而提高代码的可维护性和可测试性。它还提供了更好的可扩展性,通过配置文件或注解方式,可以方便地修改对象的依赖关系而无需修改代码。此外,Spring IOC还可以通过依赖注入的方式简化对象之间的协作。 5. Spring AOP和IOC之间有什么关系? Spring AOPSpring框架的一个重要模块,它通过IOC容器来管理和应用横切关注点。在Spring中,AOP是建立在IOC的基础上的,通过IOC容器的支持,可以方便地在应用程序中应用AOP功能。 请注意,这些问题只是众多可能的面试问题中的一部分,面试官可能会根据他们的需求提出更具体的问题。为了取得良好的面试成绩,建议您深入了解Spring AOP和IOC的概念、工作原理以及在实际项目中的应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值