2016-12-07 8 views
4

私はSOと公式のドキュメントをしばらく検索しましたが、JAX-RSクライアントにCDI注入を直接使用する方法が見つかりませんでした。JAX-RSクライアントへのCDIの使用方法

ビルダーメソッドを使用してクライアントを取得しました。インジェクションを使用して別のBeanを取得するWriterInterceptor(またはコンポーネントのようなフィルタ)を登録したいとします。

CDI注入を使用して、各BeanをHK2に登録しないでください。

ClientBuilder.newBuilder() 
      .register(MyWriter.class) 
      .build(); 

注入されたクラスのMyWriter。

私はJersey 2とWeld SEが組み込まれた桟橋で走っています。

答えて

0

それを使用してJava SEアプリケーションに注入することが可能です。主な初期内部

@Singleton 
public class Application { 

private static Logger logger = LoggerFactory.getLogger(Application.class); 

    @inject 
    private SomeOtherBean injectedBean; 

public void run() { 
    logger.debug("application initialized"); 
     injectedBean.doSomething(); 

} 

} 

​​

は私がすべてを正しく理解していれば、これは持っているドキュメントもチュートリアル https://randling.wordpress.com/2011/08/15/cdi-in-java-se/

+0

私はすでにこのタイプの構成を使用しています。私の質問は、HK2注入がWeldよりも優先されるため、CDIをJAX-RSクライアントに使用することです。 –

0

以下

https://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#_java_se

以下を見てくださいweildアレadyが尋ねられました。answered。一言で言えば、H2Kバインダーのデフォルトの動作をオーバーライドしなければならないため、ウェルドビーンマネージャーに到達します。後でH2KですべてのBeanを登録する必要はありません。

編集:あなたはコメントを読んでする必要はありませんので、ポストにすべてのものを含むように:

  • linked answerは、クライアント、サーバー側のためではありません。標準ツール(Jersey Client-side injection providersWeld bridge)で
  • は、不可能、あまりにも大きなオーバーヘッドが/カスタムクライアント側の注入を行うためにDropwizardプロジェクトthey managedにどうやら
  • を行うことのようです。
+0

これはサーバー側にのみ適用され、私はあなたが参照する答えに記述されているものを実装しました。 –

+0

確かに、あなたは正しいです。 [標準クライアントサイド注入プロバイダ](https://jersey.java.net/documentation/latest/client.html#d0e5194)と[ジャージウェルドエクステンション](https:// github。 java/org/glassfish/jersey/weld/se/WeldHk2LocatorManager.java)クライアント側でトリックを実行しますか? –

+0

私はクライアントのロケータを置き換えることはできませんでしたが、依然として手動検索が機能していますが、直接注入を使用したいと思います。 –

関連する問題