# AOP

# 简介

面向切面编程

在这里插入图片描述

Aspect(切面):封装的用于横向插入系统功能(如事务、日志等)的类。该类要被Spring容器识别为切面,需要在配置文件中通过元素指定。 Joinpoint(连接点):在程序执行过程中的某个阶段点,它实际上是一个对象的操作,例如方法的调用或者异常的抛出。在Spring AOP中,连接点就是指方法的调用。 Pointcut(切入点):切面与程序流程的交叉点,即那些需要处理的连接点。通常在程序中,切入点指的是类或者方法名,如某个通知要应用到所有以add开头的方法中,那么所有满足这一规则的方法都是切入点。 Advice(通知/增强处理):AOP框架在特定的切入点执行的增强处理,即在定义好的切入点处所要执行的程序代码。可以将其理解为切面类中的方法,它是切面的具体实现。 Target Object(目标对象):指所有被通知的对象,也称为被增强对象。如果AOP框架采用的是动态的AOP实现,那么该对象就是一个被代理对象。 Proxy(代理):将通知应用到目标对象之后,被动态创建的对象 Weaving(织入):将切面代码插入到目标对象上,从而生成代理对象的过程。

# 动态代理

Spring AOP 默认使用 JDK 动态代理,如果对象没有实现接口

springboot2.x 开始, 默认使用cglib动态代理

jdk动态代理的性能要高于cglib

jdk动态代理的对象必须实现一个或多个接口

如果想代理没有实现接口的类,那么可以使用CGLIB代理

1.jdk动态代理不是很灵活,必须依赖接口。

2.当单个层次的代理jdk动态代理能够胜任 ,当多级代理层层代理时,jdk代理不能够满足,因为不能够找到被代理的根对象