5

以下の行で:

これらは、クラスローダーを取得する2つの方法です

1) Thread.currentThread().getContextClassLoader();

2) getClass().getClassLoader();

この2つの違いを誰か教えてください。

また、私の 2 番目の質問は、Thread.currentThread().getContextClassLoader() をいつ使用するかです。

私はすでに同じことに関して StackOverflow に関するいくつかの投稿を参照しましたが、基本的な答えは見つかりませんでした。

あなたが提案した質問の答えを見ました。

スレッドのコンテキスト クラスローダーと通常のクラスローダーの違い

スレッド コンテキスト クラスローダは、クラスローディング委任スキームの周りにバック ドアを提供します。JNDI を例にとると、その根幹は rt.jar (J2SE 1.3 以降) のブートストラップ クラスによって実装されますが、これらのコア JNDI クラスは、独立したベンダーによって実装され、アプリケーションの -classpath にデプロイされる可能性がある JNDI プロバイダーをロードする可能性があります。このシナリオでは、親クラスローダ (この場合は最初のクラスローダ) が、その子クラスローダの 1 つ (たとえば、システムのクラスローダ) から見えるクラスをロードする必要があります。通常の J2SE 委譲は機能しません。回避策は、コア JNDI クラスでスレッド コンテキスト ローダーを使用することです。これにより、適切な委譲とは反対の方向にクラスローダー階層を効果的に「トンネリング」します。

回避策は、コア JNDI クラスでスレッド コンテキスト ローダーを使用することであることが示唆されているため、この場合にこれがどのように役立つかわかりませんでした。

親クラスローダを使用して実装ベンダー クラスをロードしたいのですが、それらは親クラスローダから見えません。この親クラスローダーをスレッドのコンテキストクラスローダーに設定したとしても、親を使用してそれらをロードするにはどうすればよいですか。

提案してください

4

0 に答える 0