【Spring】谈谈你对IOC和AOP理解(2024最新)

文章介绍了IOC(控制反转)的概念,它是如何通过Spring容器实现的,以及AOP(面向切面编程)的基本原理和应用场景。AOP作为面向对象的补充,用于减少代码重复和解耦。文中提到了AOP的关键术语,如切面、切入点、通知,并举例说明了AOP在日志记录中的应用。

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

前言

java最新面试题(java基础、集合、多线程、jvm、锁、算法、CAS、Redis、数据库、mybatis、spring、springMVC、springBoot、微服务)

一.IOC(Inversion of Control)

1.IOC是什么?

控制反转,将创建对象进行反转,因为正常都是程序员去创建对象,现在使用spring容器去创建,根据需求自动去创建对象。
对象实例化,通过spring容器进行创建和管理,spring通过DI(数据注入)实现IOC。

2.IOC的实现原理

实现原理是工厂模式加反射机制。

二.AOP(Aspect Oriented Programming)

1.AOP是什么?

AOP也是以IOC为基础,面向切面编程,抽象化的面向对象,面向对象的补充和完善。面向对象就是把事务的特性和行为抽象为一个对象,比如:people类都有身高、年龄、体重等属性,也有吃饭、睡觉等行为。这些属性和行为封装成一个类。面向切面就像people类有自己的属性和行为,但是有一小部分人要去篮球场练习两年半,不是所有人都需要去练习篮球。那么AOP就把练习篮球的业务逻辑抽离出来,然后动态切入方法中,减少代码重复和解耦。简单来说:做到核心业务和非核心业务的耦合。

什么叫切面呢,下面我用图来解释一下,把多个方法都要做的操作,抽取出来。
在这里插入图片描述

2.AOP的实现原理

AOP的实现原理是JDK动态代理, 代理模式是指给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理对象提供与真实对象相同的接口,以便代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作。
注意: 也可以使用CGLIB代理,基于类,JDK动态代理,基于接口。

3.说一下AOP都有哪些基本理念?或者是AOP的术语

  • 目标对象(target)
    需要被代理的类。
  • 连接点(JoinPoint)
    程序执行的某一个点,比如某个方法。
  • Aspect(切面)
    通常是一个类,里面定义Pointcut(切入点)和 Advice(通知)。
  • Pointcut(切入点)
    用来指定需要将Advice(通知)使用到哪些地方。
  • Advice(通知)
    所要增强或增加的功能。
  • weave(织入)
    把切面应用到目标对象并创建新的代理对象的过程.
  • introduction(引入)
    在不修改代码的前提下,引入可以在运行期为类动态地增加一些方法或字段。

4.Advice(通知)的类型有哪些

①前置通知(Before Advice): 在目标方法执行之前执行。
②后置通知(After Advice): 在目标方法执行之后执行 。
③环绕通知(Around): 在目标方法调用前后均可执行自定义逻辑。
④返回通知(After returning advice): 在目标方法返回结果之后执行。
⑤异常通知(After throwing advice): 异常通知, 在方法抛出异常之后。

5.AOP的应用场景

(1) 日志记录
(2) 事务
(3) 权限管理
(4) 缓存
(5) 懒加载
(6) 内容传递
(7) 错误处理
(8) 调试
(9) 性能优化
(10) 持久化
(11) 资源池
(12) 同步
(13) 记录跟踪 优化 校准

6.使用AOP实例(日志举例)

AOP实现日志记录(注解形式)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱穿背带裤的馫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值