1. CtClass在toClass()或writeFile()之后会被冻结,冻结之后不可改动;如果要改,需要先通过ctClass.defrost()解冻
2. 当javassist的目标是servlet 容器里的app时,如何让ClassPool搜索web app里面的CtClass?
ClassLoader cl = Thread.currentThread().getContextClassLoader(); classPool.insertClassPath(new LoaderClassPath(cl));
3.CtClass对象创建后会保存在ClassPool里以供后用,如果对象太多了就会导致内存问题。如果某个CtClass对象不需要再用了,你就应该显式地移除它:
a.ctClass.detach(),把ctClass从pool里移除
b.或者再执行一次 classPool = ClassPool.getDefault(),使原来的pool对象失去引用被gc掉,它里面的ctClass对象也会跟着gc掉
4.ctClass.getDeclaredMethod("hello")并不会去父类搜索hello方法