美文网首页
Spring AOP 工作原理

Spring AOP 工作原理

作者: zhglance | 来源:发表于2020-02-07 14:30 被阅读0次

1. Spring AOP

AOP(Aspect Oriented Programing)指面向切面编程,是通过预编译和运行时动态代理实现的一种技术。

1.1 AOP 相关概念

1.连接点:join point

指Java程序中的具有边界性质的特定位置,如类初始化之前,类初始化之后,方法调用前和方法调用后等。目前Spring仅支持类方法这样的join point,可以在方法前,方法后这样的连接点织入(weaving)增强(advice)。

2 切点:point cut

AOP把类方法作为查询条件,通过point cut找到连接点(join point),即让切点来筛选连接点,如目标类有5个方法, 程序只想让3个方法实现增强,剩余的2个不需要增强,那个就通过point cut从5个方法中,筛选出需要增强的3个方法。

3.通知:advice

advice是织入到目标类方法(即join point)的程序代码块,并且制定要织入的连接点的方位(方法前,方法后等),advice主要有AfterAdvice,BeforeAdvice,ThrowAdvice,MethodInterceptor和AfterReturningAdvice等。

4.目标对象:Target

advice的增强代码织入的目标类。

5.引入:Introduction

Introduction为类添加属性或者方法,这样是一些类在没有实现某些接口的情况下,动态的添加该接口的实现。

6.织入:weaving

织入是指将advice添加到目标类方法(即连接点)上的过程,Spring采用动态代理织入,AspectJ采用编译器期间和类加载期间织入。

7.代理:proxy

目标类被织入advice后,形成一个新的代理类,该代理类同时具有目标类和advice的功能。

8.切面:Aspect

切面包含了point cut和advice组成,point cut指定了在什么地方干(指定增强的目标类方法),advice指定了干什么(增强代码块)和什么时候(before or after)干。

8.指导顾问:advisor

在Spring IOC容器启动时,会根据我们的配置(xml或注解)生成一个个Advisor,构建形成一个Advisor责任链,然后通过遍历链,生成对应的代理类。

2.Spring AOP的流程:

spring aop.jpg

说明:
在JDK的早期版本,Cglib代理性能要明显优于JDK动态代理,但是JDK8以后,JDK对JDK动态代理做了优化,目前性能和Cglib性能相当。
在Spring配置中加入<aop:aspectj-autoproxy proxy-target-class=“true”/>,强制使用CGLib代理。

相关文章

网友评论

      本文标题:Spring AOP 工作原理

      本文链接:https://www.haomeiwen.com/subject/csvmxhtx.html