私は、Spring IoCコンテナ内でBeanクラスをロードしたりアンロードしたりできるように、実行時に動的にする必要があるという特別な要件があります。クラスローダーを使用してSpring Beanをインスタンス化する方法は?
Beanが
- を作成したが 再び作成
- (同じクラス、同じクラスの可能性の新しいバージョンから)
に私は問題を破壊する必要がありますステップ1のクラスはシステムクラスローダーにロードされているので、Beanを破棄してもそこに残ります。だからステップ3では、古いクラスのオブジェクトを取得し、新しいクラスは取得しません。
私の問題の解決策は、システムクラスローダーではなくMyClassLoaderでクラスをロードすることです。
だから私の手順は
- になるがAppContextを から
- を豆をゼロにし、削除するためにBean参照を設定するには、クラスローダの参照を設定しますnull
手順1と2を使用してBeanをリロードする
私の質問は、Spring IoCコンテナで上記の方法を実装する方法ですか?
おかげで、
よろしく、
ビマル
新しいクラスローダーでスプリングコンテキストを再作成できますか? Beanを再作成すると、そのBeanが参照されていた既存のBeanに再投入されません。また、親クラスローダーは常に子孫より優先されることに注意してください。 – mrembisz
@mrembiszこんにちは、新しいクラスローダーでAppContext自体を作成することをお勧めします。私は試してみましょう。しかし、新しいクラスローダにAppContextを作成すると、このコンテキスト内のすべてのBeanも同じクラスローダにロードされるようになりますか? – weima
context.setClassLoader(classLoader)を呼び出して確認してください。また、リロードするクラスは、classLoaderの親クラスで使用できないようにする必要があります。 – mrembisz