2012-03-09 17 views
2

私は実行時にいくつかのクラスをロードする必要があるプロジェクトに取り組んでいます。ロードするクラスはCDIコンテナの一部であり、いくつかのものを注入できる必要があります。 「ローディングクラス」自体は、CDIコンテナの一部でもあります。CDI - 実行時にクラスを挿入する

今すぐ問題が発生します。リフレクションを介してどのクラスをロードしてインスタンス化することは可能ですが、この場合、クラスをロードして何かを取得することはできません。したがって、@ javax.inject.Injectアノテーションを使用するときのように、これらのクラスのインスタンスをサーバーで内部的に実行する必要があります。

別のCDIコンテナのクラスをインジェクションで使用できる方法でロードする方法はありますか?それ以外の場合は意味がありません^^)。たぶんクラスのすべての種類がこれらのクラスのすべてを処理するので、ロードするクラスの名前を伝えることができます(リフレクションと同じように)。あなたは「手続き型」のプログラミングではなくOOに入っているように聞こえるよう

おかげ

答えて

4

あなたは豆の種類に基づいて、コンテキストの参照を照会しLAODするBeanManager APIを使用することができます。

0

は、慎重にあなたのデザインを確認します。これは、遭遇する可能性が高い設計上の多くの問題の最初の可能性があります。

私は考えているかもしれませんが、これらのクラスを特定のインターフェイスを実装できるようにすることはできますか?そうであれば、インタフェースでコード内の通常の@Injectアノテーションを使用し、クラス実装をサーバ上の/ libディレクトリに埋め込むことができます。これは、CDIの選択肢と組み合わせることで、あなたが望むものを得ることができるかもしれません。

より良いアプローチは、反射や工場のいくつかの種類を使用することであってもよい

...

関連する問題