我目前正在使用
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机制,我应该使用哪个类加载器?
答案 0 :(得分:2)
通常,您希望使用加载当前正在执行的代码的类加载器。也就是说,您只想致电getClass().getClassLoader().loadClass(...)
。也就是说,有时您需要使用不同的类加载器。必要时需要数小时的培训。因此,您应该始终使用加载当前正在执行的代码的加载程序。
答案 1 :(得分:1)
您可以使用getClassLoader().loadClass(myClass).newInstance()
,
它将在当前的类加载器中查找该类,如果找不到则将转到父类加载器。
myClass应该是完全限定的名称,例如java.lang.String