• Java平台上的AOP实现机制


    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:在相应连接点之后执行。该种形式又可以细划分为:
  • 相关阅读:
    内存对齐
    总结一下,一晃工作有一年了
    标准库中迭代器的关系
    反转迭代器和插入迭代器的区别
    MFC定时关机程序的实现3-最小化到托盘栏
    MFC定时关机程序的实现2-添加启动项到注册表
    MFC定时关机程序的实现1
    C++文件读写之对象的读写
    ADO之密码验证--3次错误就锁定『改进』
    ADO之密码验证--3次错误就锁定
  • 原文地址:https://www.cnblogs.com/wzk1992/p/8910051.html
Copyright © 2020-2023  润新知