Spring AOP

什么是AOP

AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不改变源代码的情况下给程序动态统一添加额外功能的一种技术。
可以说AOP是OOP动态的一部分,OOP是一种静态,必须想确定好对象、子系统、模块(少返工)...AOP面向切面的运行代理,可以对象运行时动态的织入一些扩展功能或控制对象执行。
{(服务增益)基于基本业务,做日志处理、权限控制、事务处理、做异步、做缓存......}
补充:设计思想:MVC分层架构设计思想、连接池(池化思想)、IOC控制反转思想、面向对象(OOP).......

 OCP:开闭原则,实现功能的扩展

业务在AOP编程时,如何基于OCP原则实现功能扩展?
1.在编译时,类似于用Lombok思想,在编译时自动重写。
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注解描述的方法参数。

阅读 87

推荐阅读