Javassist为我们提供了类似于Java反射机制的API,如:CtClassCtConstructorCtMethodCtField与Java反射的ClassConstructorMethodField非常的类似。

    描述
    ClassPool ClassPool是一个存储CtClass的容器,如果调用get方法会搜索并创建一个表示该类的CtClass对象
    CtClass CtClass表示的是从ClassPool获取的类对象,可对该类就行读写编辑等操作
    CtMethod 可读写的类方法对象
    CtConstructor 可读写的类构造方法对象
    CtField 可读写的类成员变量对象

    Javassist使用了内置的标识符来表示一些特定的含义,如:$_表示返回值。我们可以在动态插入类代码的时候使用这些特殊的标识符来表示对应的对象。

    表达式 描述
    $0, $1, $2, ... this和方法参数
    $args Object[]类型的参数数组
    $$ 所有的参数,如m($$)等价于m($1,$2,...)
    $cflow(...) cflow变量
    $r 返回类型,用于类型转换
    $w 包装类型,用于类型转换
    $_ 方法返回值
    $sig 方法签名,返回java.lang.Class[]数组类型
    $type 返回值类型,java.lang.Class类型
    $class 当前类,java.lang.Class类型