AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)

AOP设计与原理(连接点,切入点与代理模式)

上一章讲了AOP的概念:
这一章换个角度讲一下什么是AOP,(本章属于半转载)。

java程序执行——方法调用

在学java基础我们就知道,一个java程序总是从main方法开始运行的,当开始运行时JVM会创建一个主线程,主线程就以main方法为入口开始执行代码。从线程栈的角度来看,JVM处理Java程序的基本单位是方法调用(宏观角度)。
在我们使用面向对象解决问题时,我们考虑的是如何按照执行顺序通过方法调用来实现我们的业务逻辑。
如果从虚拟机线程栈的角度考虑Java程序执行的话,那么,你会发现,整个程序运行的过程就是方法调用的过程。

连接点

我们将上述的线程栈里的方法调用按照执行流排列,会有如下类似的图:
《AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)》
基于程序运行的先后顺序,我们可以将方法的调用排成一条线。而每个方法调用则可以看成这条线上的一个节点。这个节点在AOP的术语中,被称为Join Point,即连接点。 一个Java程序的运行的过程,就是若干个连接点连接起来依次执行的过程。

切面/切入点

AOP(Aspect Oriented Programming)则是从另外一个角度来考虑整个程序的,AOP将每一个方法调用,即连接点作为编程的入口,针对方法调用进行编程。从执行的逻辑上来看,相当于在之前纵向的按照时间轴执行的程序横向切入。相当于将之前的程序横向切割成若干的面,即Aspect.每个面被称为切面。

《AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)》

因为切面本质上是每一个方法调用,选择切面的过程实际上就是选择方法的过程。那么,被选择的切面(Aspect)在AOP术语里被称为切入点(Point Cut). 切入点实际上也是从所有的连接点(Join point)挑选自己感兴趣的连接点的过程。
《AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)》

代理模式实现AOP

既然AOP是对方法调用进行的编程,那么问题来了,AOP如何捕获方法调用的呢?也就是说,AOP怎么知道当前运行到了哪个方法了呢?
为了弄清这个问题,你就不得不了解设计模式中的代理模式了!
什么是代理模式?
举例:真正的实例对象就先对迪丽热巴,迪丽热巴没火的时候人家让她去跳舞,她自己就去了,就相当于之前没有代理对象的时候,现在有了代理对象就相当于她有了经纪人,想让迪丽热巴跳舞就得先联系经纪人。
我们假设在我们的Java代码里,都为实例对象通过代理模式创建了代理对象,访问这些实例对象必须要通过代理,那么,加入了proxy对象(代理角色)的Java程序执行流会变得稍微复杂起来。
《AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)》
既然Spring代理层可以察觉到你所做的每一次对实例对象的方法调用,那么,Spring就有机会在这个代理的过程中插入Spring的自己的业务代码。

下一章:动态代理实现AOP的两种方式:

    原文作者:AOP
    原文地址: https://blog.csdn.net/qq_34598667/article/details/83352227
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞