【Spring】谈谈你对IOC和AOP理解(2023最新)
前言
一.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) 记录跟踪 优化 校准