zoukankan      html  css  js  c++  java
  • 深入浅出Java探针技术2---java字节码生成框架ASM、Javassist和byte buddy的使用

    目前Java字节码生成框架大致有ASM、Javassist和byte buddy三种

    ASM框架介绍及使用

    1.ASM介绍

    ASM是一种Java字节码操控框架,能够以二进制形式修改已有的类或是生成类,ASM可以直接生成二进制class文件也可以在类被加载入JVM之前动态改变类,只不过ASM在创建class字节码时说底层JVM的汇编指令,需要使用者对class组织结构和JVM汇编指令有一定的了解。由于Java 类存储在.class文件中,这些类文件中包含有:类名称、方法、属性及字节码,ASM从类文件中读入信息后改变类行为、分析类信息或者直接创建新的类。

    著名的使用到ASM的案例便是lambda表达式、CGLIB动态代理类

    2.ASM内容

    ASM框架核心类包含

    ClassReader:该类用来解析编译过的class字节码文件

    ClassWriter:该类用来重新构建编译后的类,比如修改类名、属性、方法或者根据要求创建新的字节码文件

    ClassAdapter:实现了ClassVisitor接口,将对它的方法调用委托给另一个ClassVisitor对象

    3.ASM使用案例

    ASM使用之前需要导入jar包asm.jar,我们来通过ASM来对一个现有的类的方法进行字节码增强,实现在方法的开头和结尾打印日志的功能

    Javassist及使用

    1.javassist介绍

    Javassit相比于ASM要简单点,Javassit提供了更高级的API,当时执行效率上比ASM要差,因为ASM上直接操作的字节码。功能和JDK自带的反射功能类似,但是比反射要强大。

    2.javassist内容

    Javassist核心类包括

    ClassPool:一个基于HashMap实现的CtClass对象容器,key上类名,value上这个类的CtClass对象

    CtClass:表示一个类,可以从ClassPool中获取

    CtMethods:表示一个类的方法

    CtFields:表示类中的属性

    3.javassist使用案例

    Byte Buddy及使用

    1.byte buddy介绍

    byte buddy是一个提供了API用于生成任意Java类工具包,可以生成和修改字节码。

    2.byte buddy使用案例

  • 相关阅读:
    C++ Boost Thread 编程指南
    boost的Any库学习
    人生规划,关注未来,才能持续发展
    察言观色—看穿他人心理的6种方法
    MS SQL Server 2008发布与订阅
    WebService代理类中对枚举类型的序列化
    Winform注册和注销全局快捷键
    sql server中如何为数据表添加表的描述MS_Description
    如何修改SQL Server 2008数据库服务器名称
    IIS 上发布网站后编译器错误信息: CS0016: 解决办法
  • 原文地址:https://www.cnblogs.com/jackion5/p/10680343.html
Copyright © 2011-2022 走看看