Weld を JavaFX 2 (SE) アプリケーション内で動作させようとしています (または、Weld 内で JavaFX と言うべきでしょうか?)。ユーザーの操作に応答するコントローラーがあります。ここで、たとえばデータベース サービスなどのサービスをこれらのコントローラーに挿入したいと考えています。
Weld を使用すると、次のように簡単に実行できます。
@Inject
private MyService service;
Weld を初期化するには、3 つのオプションがあります。
オプション1)
public void main(@Observes ContainerInitialized event) {
launch(); // start JavaFX
}
オプション 2)
public static void main(final String[] args) {
new StartMain(args).go();
launch(args);
}
オプション 3)
public static void main(final String[] args) {
final WeldContainer weld = new Weld().initialize();
service = weld.instance().select(MyService.class).get();
launch(args);
}
オプション 1 と 2 は、注釈付きの注入ポイントに何も注入されないため、コントローラーで NullPointerExceptions につながります。オプション 3 のみが機能しますが、メイン アプリケーション クラスではなく JavaFX コントローラーでサービスを使用する必要があるため、これは実際には必要ありません。オプション 3 では、初期化されたサービスを何らかの形でコントローラー クラスに渡す必要があり、この場合は Weld は必要ありません。では、サービス Bean を JavaFX コントローラーに注入するにはどうすればよいでしょうか。残念ながら、私の問題に関するドキュメントは見つかりませんでした。
誰かが Weld と JavaFX の使用経験を積んでいて、私を助けてくれるかもしれません。
アップデート
Weld ディスカッション フォーラムに自分の取り組みの一部を書き留めましたが、残念ながら回答がありませんでした。私の意見では、Weld は JavaFX では機能しません。古き良きセッターを使用してサービスをコントローラーに挿入する必要があると思います(解決策についてはフォーラムを参照してください)。
更新 2
Weld と JavaFX 2 に関するブログを見つけました。私はまだこの解決策を試していませんが、他のプログラマーには役立つと思います。