WEB-INF/classes フォルダーの下の war ファイルで定義されたインターフェイスがあります。アイデアは、war ファイルを乱すことなく、実装をクラスパスに配置することです。私が考えた解決策は、実装を tomcat_home/lib ディレクトリに配置することでしたが、実装とインターフェイスに異なるクラスローダーを使用する可能性があるため、インターフェイスが解決されず、ClassNotFound がスローされています。このシナリオを達成することは可能ですか?
質問する
188 次
2 に答える
0
Application Server ランタイムのクラスローダーは、Tomcat lib のクラスが web-inf/classes のクラスの前にロードされる委譲階層に従っているため、実装がインターフェイスの前にメモリにロードされているため、このエラーが発生しています。したがって、エラーを削除したい場合は、両方を tomcat lib に保持して、両方が同時にロードされるようにします。
委譲設計では、クラス ローダーは、クラス自体をロードしようとする前に、クラスのロードをその親に委譲します。クラス・ローダーの親は、システム・クラス・ローダーまたは別のカスタム・クラス・ローダーのいずれかです。親クラス・ローダーがクラスをロードできない場合、クラス・ローダーはクラス自体をロードしようとします。実際、クラス・ローダーは、親が使用できないクラスのみをロードする責任があります。上位階層のクラス・ローダーによってロードされたクラスは、下位階層で使用可能なクラスを参照できません。
于 2013-07-19T10:30:47.093 に答える