javaassist class文件重新加载的问题
时间:2014-08-29 14:40:58
收藏:0
阅读:1678
javaassist
ClassPool 是javassist的一个对象池,通过
pool.insertClassPath(string);这个方法可以向池子里添加对象,但是有个问题,如果我们通过这种方式添加了池,class改变了,池里的文件仍然为原来的class文件。
并没有重新加载一次class文件,而classpool类并没有提供对应的方法。
除了一个 CtClass removeCached(String classname) ,这方法。可惜非公开的。
于是办法如下:
public class ReClassPool extends ClassPool{ @Override public CtClass removeCached(String classname) { return (CtClass)classes.remove(classname); } }
重新定义一个对象池,覆盖父类,设置为公开。
CtClass claName = null; try { // if (!classPath.endsWith(".jar")) pool.removeCached(packagePath); claName = pool.get(packagePath);
在获取类对象的时候,先清除缓存,这个时候就会重新获取class文件对象。因此就动态的加载了。
搞定!
原文:http://blog.csdn.net/wm198966/article/details/38925261
评论(0)