这篇文章给大家介绍如何分析Spring AOP设计与原理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
java程序执行——方法调用
在学java基础我们就知道,一个java程序总是从main方法开始运行的,当开始运行时JVM会创建一个主线程,主线程就以main方法为入口开始执行代码。从线程栈的角度来看,JVM处理Java程序的基本单位是方法调用(宏观角度)。在我们使用面向对象解决问题时,我们考虑的是如何按照执行顺序通过方法调用来实现我们的业务逻辑。如果从虚拟机线程栈的角度考虑Java程序执行的话,那么,你会发现,整个程序运行的过程就是方法调用的过程。
我们将上述的线程栈里的方法调用按照执行流排列,会有如下类似的图:
基于程序运行的先后顺序,我们可以将方法的调用排成一条线。而每个方法调用则可以看成这条线上的一个节点。这个节点在AOP的术语中,被称为Join Point,即连接点。一个Java程序的运行的过程,就是若干个连接点连接起来依次执行的过程。
AOP(Aspect Oriented Programming)则是从另外一个角度来考虑整个程序的,AOP将每一个方法调用,即连接点作为编程的入口,针对方法调用进行编程。从执行的逻辑上来看,相当于在之前纵向的按照时间轴执行的程序横向切入。相当于将之前的程序横向切割成若干的面,即Aspect.每个面被称为切面。
因为切面本质上是每一个方法调用,选择切面的过程实际上就是选择方法的过程。那么,被选择的切面(Aspect)在AOP术语里被称为切入点(Point Cut). 切入点实际上也是从所有的连接点(Join point)挑选自己感兴趣的连接点的过程。
既然AOP是对方法调用进行的编程,那么问题来了,AOP如何捕获方法调用的呢?也就是说,AOP怎么知道当前运行到了哪个方法了呢?为了弄清这个问题,你就不得不了解设计模式中的代理模式了!什么是代理模式?举例:真正的实例对象就先对迪丽热巴,迪丽热巴没火的时候人家让她去跳舞,她自己就去了,就相当于之前没有代理对象的时候,现在有了代理对象就相当于她有了经纪人,想让迪丽热巴跳舞就得先联系经纪人。我们假设在我们的Java代码里,都为实例对象通过代理模式创建了代理对象,访问这些实例对象必须要通过代理,那么,加入了proxy对象(代理角色)的Java程序执行流会变得稍微复杂起来。
既然Spring代理层可以察觉到你所做的每一次对实例对象的方法调用,那么,Spring就有机会在这个代理的过程中插入Spring的自己的业务代码。
关于如何分析Spring AOP设计与原理就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。