javassist的一些注意事项

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方法

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.