美文网首页
java-AOP彻底解析

java-AOP彻底解析

作者: coderljx | 来源:发表于2019-06-16 22:28 被阅读0次

    AOP是一种编程范式,与语言无关,是一种程序设计思想。
    面向切面编程(AOP)Aspect Oriented Programming。
    切面编程的目的是为了把通用逻辑从业务逻辑分离出来。

    先来看看切面的常用术语:
    Join point: 拦截点,如某个业务方法。
    Pointcut: Joinpoint 的表达式,表示拦截哪些方法。一个 Pointcut 对应多个 Joinpoint。
    Advice: 要切入的逻辑。
     BeforeAdvice 在方法前切入。
     After Advice 在方法后切入,抛出异常时也会切入。
     AfterReturningAdvice 在方法返回后切入,抛出异常则不会切入。
     AfterThrowingAdvice 在方法抛出异常时切入。
     Around Advice 在方法执行前后切入,可以中断或忽略原有流程的执行。

    一些表达式示意图:


    aspect常用表达式.png 表达式示意图.png

    AOP实现技术:


    aop实现技术.png

    AOP各种实现优缺点:


    各种实现优缺点.png

    AOP切面代码织入时机:
    1 编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
    2 类加载期:切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增 强该目标类的字节码。AspectJ 5的加载时织入(load-time weaving,LTW)就支持以这种方式织入切面
    3 运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。Spring AOP就是以这种方式织入切面的。

    Spring创建AOP代理过程!

    demo例子来自 spring源码深度解析这本书。
    截取 增强器提前的部分断点代码:


    关键代码部分.png

    Instrument静态代理!

    参考:
    AOP的实现机制
    spring源码深度解析
    spring实战第4版
    深入理解类加载器相关文章
    cglib

    相关文章

      网友评论

          本文标题:java-AOP彻底解析

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