Spring / Tomcat中的动态类加载

时间:2013-03-06 05:26:40

标签: java tomcat classloader

我目前正在使用

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

在部署到tomcat服务器的spring app中动态加载对象。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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