美文网首页
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彻底解析

    AOP是一种编程范式,与语言无关,是一种程序设计思想。面向切面编程(AOP)Aspect Oriented Pro...

  • display:none 与 visibility:hidden

    首先display:none;是将DOM元素彻底的消失,彻底的不解析,在代码中不占位。而visibility:hi...

  • Android事件分发机制完全解析

    Android事件分发机制完全解析,带你从源码的角度彻底理解(上)Android事件分发机制完全解析,带你从源码的...

  • OkHttp使用教程

    OkHttp使用教程 Android OkHttp官方教程解析-彻底入门OkHttp使用 How to ret...

  • druid分析SQL

    sql解析工具 druid 1.优点:因为本身做连接池,sql解析比jsqlparse要彻底2.操作sql方便,直...

  • iOS-多线程相关

    本篇涵盖多线程解析、应用等. 1.iOS多线程--彻底学会多线程之『RunLoop』2.iOS多线程--彻底学会多...

  • 资源

    okHttp的使用: OkHttp使用完全教程OkHttp官方教程解析-彻底入门OkHttp使用 okHttp的源...

  • ios 相关知识复习

    1.CoreAnimation iOS动画篇_CoreAnimation(超详细解析核心动画) 扩展1彻底理解po...

  • Android 重要控件原理

    Android ListView工作原理完全解析,带你从源码的角度彻底理解 Android 自己动手写ListVi...

  • OKHTTP 源码解析

    参考彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想Okhttp3源码分析 call放到了...

网友评论

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

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