3

我目前正在使用

String myClass; // dynamically determined class name
Class.forName(myClass).newInstance()

在部署到 tomcat 服务器的 spring 应用程序中动态加载对象。

我一直在阅读(http://blog.bjhargrave.com/2007/09/classforname-caches-defined-class-in.html),动态加载类的首选方法是使用 ClassLoader.loadClass,例如

ClassLoader.getSystemClassLoader().loadClass(myClass).newInstance()

在第二个示例中,使用loadClass时,我收到一个找不到类的错误。我怀疑这是因为我在 Tomcat 中运行系统类加载器不是我真正想要使用的类加载器。

在 Tomcat 应用程序中,如果我想使用 loadClass 机制,我应该使用哪个类加载器?

4

2 回答 2

2

通常,您希望使用加载当前执行代码的类加载器。也就是说,您只想调用getClass().getClassLoader().loadClass(...). 也就是说,有时您需要使用不同的类加载器。必要时需要数小时的培训。因此,您应该始终使用加载当前执行代码的加载器。

于 2013-03-06T05:36:39.360 回答
1

你可以使用getClassLoader().loadClass(myClass).newInstance()

它将在当前类加载器中查找类,如果找不到则转到父类加载器。

myClass 应该是完全限定名称,例如java.lang.String

于 2013-03-06T05:44:18.413 回答