什么是 AOP
AOP(Aspect Orient Programming)是一种设计思维,是软件设计畛域中的面向切面编程,是面向对象编程(OOP)的一种补充和欠缺。它以通过预编译形式和运行期动静代理形式,实现在不扭转源代码的状况下给程序动静对立增加额定性能的一种技术。
能够说 AOP 是 OOP 动静的一部分,OOP 是一种动态,必须想确定好对象、子系统、模块 (少返工)…AOP 面向切面的运行代理,能够对象运行时动静的织入一些扩大性能或管制对象执行。
{(服务增益)基于根本业务,做日志解决、权限管制、事务处理、做异步、做缓存 ……}
补充:设计思维:MVC 分层架构设计思维、连接池(池化思维)、IOC 管制反转思维、面向对象(OOP)…….
OCP: 开闭准则,实现性能的扩大
业务在 AOP 编程时,如何基于 OCP 准则实现性能扩大?
1. 在编译时,相似于用 Lomback 思维,在编译时主动重写。
2. 在运行时,对这个办法重写(写一个子类继承这个类重写)或组合形式:对象之间的协同
Spring AOP 利用原理剖析
基于代理机制机制(动静形式)实现性能扩大
1.JDK 动静代理机制:指标对象(被代理对象)实现接口,JDK 代理机制为指标对象创立代理对象(指标类和代理类会实现独特接口)—- 了解为兄弟关系,兄弟间协同、耦合
2.CGLIB 代理机制:指标对象(被代理对象)没有实现接口,CGLIB 代理机制为指标对象创建对象(默认创立的代理类会继承指标对象类型)—- 继承 —-SpringBoot2.X 中 AOP 默认应用 CGLIB 代理,如果要应用 JDK 代理能够在配置文件 (applicatiion.properties)** 中进行配置:
spring.aop.proxy-target-class=false
Spring 中 AOP 相干术语
1. 切面(aspect): 横切面对象,借助 @Aspect 申明
2. 告诉(Advice): 在切面的某个特定的连接点上执行的动作(扩大性能)
3. 连接点(joinpoint): 程序执行过程中某个特定的点,个别指拦挡到的指标办法
4. 切入点(pointput): 对多个连接点的一种定义,个别能够了解为多个连接点的汇合
@Aspect 注解用于标识或者形容 AOP 中的切面类型,基于切面类型构建的对象用于为指标对象进行性能扩大或控制目标对象的执行。
@PointCut 注解用于形容切面中的办法,并定义切面中的切入点(基于特定表达式的形式进行形容)
@Around 注解用于形容切面种办法,这样的办法会被认为是一个盘绕告诉(外围业务执行之前和之后要执行的一个动作),@Aournd 注解外部 value 属性的值为一个切入点表达式或者是切入点表达式的一个援用 (这个援用为一个 @PointCut 注解形容的办法的办法名)。
ProceedingJoinPoint 类为一个连接点类型,此类型的对象用于封装要执行的指标办法相干的一些信息。只能用于 @Around 注解形容的办法参数。