美文网首页
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