Java平台上的AOP实现机制

  1. 动态代理(Dynamic Proxy)机制,在运行期间动态的为相应接口生成对应的代理对象。SpringAop默认情况下采用这种机制来实现AOP机能。缺点:相对于编译后的静态类的执行,性能上可能略逊一筹。
  2. 动态字节码增强,通过ASM或者CGLIB等java工具库,在程序运行期间,动态构建字节码的class文件。在这样的技术前提下,我们可以为需要织入横切逻辑的模块类在运行期间,为这些系统模块类生成相应的子类。此技术不受限于接口。缺点:如果需要的扩展类中包含为final的实例方法的话,则无法对其进行子类化扩展。SpringAop在无法采用动态代理的时候,会使用CGLIB库的动态字节码增强支持来实现AOP功能的扩展。
  3. java代码生成,已过时。例:由EJB容器根据开发者描述信息,生成java代码,织入相应横切逻辑。
  4. 自定义类加载器,自定义类加载器通过读取外部描述信息,在加载class文件期间就可以将横切逻辑添加到系统模块类的现有逻辑中,然后将更改后的class文件交付给虚拟机。缺点:部分应用服务器无法完美支持自定义类加载器,所以会出现失效的可能性。
  5. AOL扩展,最强大也是最难掌握的方式,AspectJ就属于这种方式。

AOP相关概念

  1. Joinpoint,织入点

    • 方法调用
    • 方法调用执行
    • 构造方法调用
    • 字段设置
    • 字段获取
    • 异常处理执行
    • 类初始化(类中某些静态类型或者静态代码块的初始化点)
  2. Poincut,Joinpoint的表述方式。参照Poincut规定的Joinpoint信息,才会明确应该往系统的哪些Joinpoint织入横切逻辑。Poinpoint表述方式:
    • 直接指定Joinpoint所在方法名称。
    • 正则表达式
    • 使用特定的Poincut表述语言
      Poincut运算,如下举例:

3.Advice,横切关注点逻辑的载体。它代表即将织入Joinpoint的横切载体。

按照advice在Joinpoint位置执行时的差异或者完成功能的不同,Advice可以分成多种形式:

  • Before Advice:在Joinpoint指定位置之前执行的Advice类型。多用来做一些系统初始化工作
  • After Advice:在相应连接点之后执行。该种形式又可以细划分为:

最新文章

  1. ShenNiu.MVC管理系统
  2. [MySQL Reference Manual] 10 全球化
  3. A记录、CNAME、MX记录、NS记录
  4. java 线程返回值
  5. 总结baiduTemplate和djangoTemplate的学习
  6. [Spring] - Property注入
  7. ERP系统开发平台 (C#语言,支持多数据库)
  8. DEDE数据库修改后台变量
  9. android -- 蓝牙 bluetooth (二) 打开蓝牙
  10. 富文本ckediter
  11. Spring3 MVC DispatcherServlet 配置问题
  12. LoadRunner学习笔记(二)
  13. IMPALA部署和架构(一)
  14. IDEA下使用Maven的test命令乱码
  15. AudioEffect中文API
  16. log4j(三)——如何控制不同级别的日志信息的输出?
  17. Java 里如何实现线程间通信
  18. python Anaconda 安装管理包,开发环境
  19. Python Socket编程基础篇
  20. linux下Ctrl命令组合

热门文章

  1. Verilog有符号整型数(signed int)比大小
  2. Task使用注意
  3. NULL判斷符
  4. 吴裕雄--天生自然JAVA数据库编程:PrepareStatement
  5. 本地连接 HDFS 报错 Exception in thread "main" org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=JM.H,access=WRITE, inode="":r
  6. DEDE后台升级后不显示编辑器
  7. 无法删除oracle用户的问题
  8. 通过虚拟机增加Linux的磁盘(分区容量)
  9. DB2的简单操作
  10. SpringIOC初始化过程源码跟踪及学习