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