【发布时间】:2014-05-20 14:58:51
【问题描述】:
我有一个实现接口 ToTest 的 MyClass 类,我想通过运行在 Tomcat 上的 Web 应用程序中的 ClassLoader 来检索它。
类如下:
public class MyClass implements ToTest {
public String doStuff(String input) {
return null;
}
}
界面是
public interface ToTest {
public String doStuff(String input);
}
当我实例化该类的普通实例时,它可以正常工作(即似乎是 ToTest 的实例),但是,当我使用我的类加载器时,该对象不会解析为 ToTest 的实例。
即
Object myObject = new MyClass();
if (myObject instanceof ToTest) {
System.out.println("This is a ToTest");
}
将打印出消息,而:
URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("c:\\tomcatfolder\\wtpwebapps\\MyApp\\WEB-INF\\classes").toURI().toURL()});
Class<?> loadedClass = classLoader.loadClass("MyClass");
Object myOtherObj = loadedClass.newInstance();
if (myOtherObj instanceof ToTest) {
System.out.println("This is a ToTest");
}
返回一个看起来是 MyClass 对象的对象,但 'if instanceof' 返回 false。
有什么想法吗?
谢谢
【问题讨论】:
-
信息不足。有没有把一些 jar 文件放到系统类路径中,而另一些放到 webapp 中?
-
不确定我是否理解问题的相关性 - ClassLoader 应该从指定位置拾取类,这也是部署 .class 文件的位置?
-
我很想投反对票...你为什么要创建自己的类加载器?
-
我的类加载器是以后在应用中加载一个动态创建的类
-
所以你打算生成 Java 源代码,编译它,将它复制到 web 应用程序类加载器上,以后可能会删除或修改它......祝你好运;)。
标签: java jakarta-ee tomcat classloader