Spring架构揭秘-AOP

一、AOP概述程序员

二、Spring AOP原理spring

三、Spring AOP架构解析编程

 

1、AOP概述架构

     Java程序员在写代码的时候一般都是使用新建对象类来描述业务特性,而后经过对象的继承、组合、扩展等手段来实现业务需求,这是典型的面相对象的编程方式即OOP,总的来讲OOP是一种由上至下的竖向编程模式。框架

     在实际的编程中,一般会遇到某些方法里会使用到相同的逻辑,好比记方法执行日志,这些代码在OOP中无法与业务代码彻底的解藕,使得方法代码就有了混合逻辑,不符合编程的单一责任原则。若是能够把这块逻辑代码解藕,通把两种逻辑的代码区分开,而后在运行期再合起来就完美了,就至关于在运行期横向的添砖加瓦,也就是面向切面横向的编程即AOP。性能

2、Spring AOP原理代理

     实现AOP的主要技术就是动态代理 ,动态代理的原理这里就不细说了,主要是来看看Spring AOP的实现原理 下载 。咱们知道一般使用的动态代理技术有JDK的和CGLIB的,其中JDK的动态代理只能代理接口级别,而CGLIB则还能够代理类级别,在Spring中结合了这二者,使得其更灵活。日志

     在细说Spring AOP原理以前先来看看如下几个重要的概念:htm

          a、链接点(JoinPoint):程序执行的莫个特定位置,好比类初始化以前,类初始化以后,方法执行以前,方法执行以后,异常抛出以后等等。对象

          b、切点(PointCut):指定程序执行的位置,每一个类对象都有多个JoinPoint,那么到底要在哪一个JoinPoint上执行呢?这就须要用PointCut来指定,一般一个PointCut能够对应多个JoinPoint。

          c、加强(Advice):加强就是织入到目标类链接点上的一段程序代码,很多地方叫它通知,笔者以为叫加强更能表达其含义。Spring 中有BeforeAdvice,AfterAdvice等。其中AOP联盟定义了标准接口Advice,Spring AOP也是基于它进行扩展的。

          d、切面(Aspect):切面是切点和加强的组合,Spring AOP就是切面的实施框架,将切面中定义的加强逻辑实施到切面中指定的连结点中去。

          e、代理(Proxy):一个类被织入加强的代码后就会产生一个代理类,在运行期真正被执行的对象。

 

     下面用图来讲一下Spring AOP的原理。 下载

Spring在初始化容器的时候会扫描相关的配置,包括XML、Annotation等,发现有标注了Aspect的Bean后会根据切面中切点定义找到目标类,而且为其织入加强代码而且经过代理生成器生成代理对象,而后供用户使用。

 

3、Spring AOP架构解析 下载

     下面用图来阐述Spring AOP的主要组成部分以及其组件结构,先来看看Spring AOP的组件图

Spring的AOP主要由四大组件构成,分别是切点组件、切面组件、加强组件、代理组件。

根据这四大组件,来看看具体的类图。 下载

 

切点组件类图:

PointCut接口只定义了两个方法,一个是getClassFilter()用于获取过滤器,判别切点可否用于目标类上,另外一个则是getMethodMatcher()用于获取方法匹配器,spring提供静态和动态的方法匹配器 下载 ,除此外还有别的方法匹配器,这里就不列举了,静态方法匹配器仅根据方法签名进行匹配,不关心运行时的参数,只匹配一次,而动态方法匹配器则由于每次方法执行传入的参数可能不同,因此每次调用方法都须要判断,对性能影响较大。

 

加强组件类图:

AOP联盟定义了AOP的标准,其中一个就是Advice加强接口,各大AOP框架都基于它来进行扩展,其中Spring就在它的基础上扩展了AfterAdvice,BeforeAdvice,DynamicIntroductionAdvice,Inteceptor也是AOP联盟定义的一个接口,用于环绕加强,即在方法执行的先后都织入加强逻辑 下载

 

代理组件类图

在Spring里,当容器初始化时扫描到切面类就会经过ProxyFactory的getProxy()来获取代理对象,而后加入Bean存储器供使用。从上图中能够清晰的看出Spring支持JDK和Cglib两种动态代理方式。 下载

 

切面组件类图

AOP总架构类图

经过最后的总架构类图就很清楚的知道Spring AOP框架的结构以及其个组件之间的组合关系

相关文章
相关标签/搜索