Javassist为我们提供了类似于Java反射机制的API,如:CtClass,CtConstructor、CtMethod、CtField与Java反射的Class、Constructor、Method、Field非常的类似。
| 类 | 描述 |
|---|---|
| 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类型 |
