目录
- 一.IOC(Inversion of Control)
- 1.IOC是什么?
- 2.IOC的实现原理
- 二.AOP(Aspect Oriented Programming)
- 1.AOP是什么?
- 2.AOP的实现原理
- 3.说一下AOP都有哪些基本理念?或者是AOP的术语
- 4.Advice(通知)的类型有哪些
- 5.AOP的应用场景
- 6.使用AOP实例(日志举例)
一.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实现日志记录(注解形式)