我正在尝试扩展ParallelWebappClassLoader
,以便在特定触发器上我可以使用com.foo.my.ClazzName
重新加载指定的类。我了解ParallelWebappClassLoader
维护自己的缓存,并在findLoadedClass0()
找到的情况下从其缓存中返回类。为了确保可以正确链接类,我想我需要使用扩展ParallelWebappClassLoader
的新实例重新加载类。如下所示:
public Class<?> loadClassAgain(String name, boolean resolve) throws ClassNotFoundException {
// lock method is internal which I have inherited.
synchronized(getClassLoadingLock(name)) {
String binaryPathName = convertNameToPath(name, true);
this.resourceEntries.remove(binaryPathName);
MyParallelClassLoader loader = new MyParallelClassLoader (this.getParent());
loader.start(); // Starts resource context.
// I have provided loadClass def such that it goes to super.loadClass()
return loader.loadClass(name,true);
}
这是正确的做法,以前有人试过吗?我试图避免tomcar上下文重新加载,即整个服务器重新启动。相反,我的目标是按给定的名称重新加载特定的类(或类)。
我不确定使用URLClassLoader
是否是一种更好的方法,但我决定从tomcat开始自己来节省一些麻烦 - 可能这是错的!?
感谢任何帮助。
此致