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()

2番目の例では、を使用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 に答える