Javaの双子委託モデルを破壊する方法は何ですか。
Javaの親子委譲モデルでは、クラスローダーは特定の順序でクラスをロードしようとします。親クラスローダーでクラスが見つからない場合、現在のクラスローダーを使用してロードを試みます。親子委譲モデルを破るには、次のいずれかの方法を使用できます:
- クラスをロードします。
public class CustomClassLoader extends ClassLoader {
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
if (name.equals("com.example.MyClass")) {
// 自定义加载MyClass类
return defineClass(name, null, 0, 0);
}
return super.loadClass(name);
}
}
- 現在のスレッドに対して、setContextClassLoader() を呼び出す。
- 現在のスレッドにコンテキストクラスローダーを設定します。
Thread.currentThread().setContextClassLoader(new CustomClassLoader());
双親委任モデルを破ると、クラスの読み込みが混乱し、予測不可能な振る舞いが発生する可能性があるため、通常は双親委任モデルを破ることはお勧めできません。クラスの動的更新など特別な要件がある場合にのみ、双親委任モデルを破る必要があるでしょう。