60.14. レイジーインジェクション/プログラムによるルックアップ
CDI プログラムモデルは、アプリケーションの初期化時に発生する タイプセーフな解決 メカニズムを優先しますが、プログラムによるルックアップ メカニズムを使用して、後でアプリケーションの実行中に動的/レイジーインジェクションを実行することができます。
Camel CDI は、便宜上、Camel プリミティブの標準的な注入に使用できる CDI 修飾子に対応する注釈リテラルを提供します。これらの注釈リテラルは、レイジーインジェクション/プログラムによるルックアップを実行するための CDI エントリーポイントである javax.enterprise.inject.Instance
インターフェイスと組み合わせて使用できます。
たとえば、@Uri
修飾子に提供されたアノテーションリテラルを使用して、ProducerTemplate
Bean などの Camel プリミティブを遅延検索できます。
@Any @Inject Instance<ProducerTemplate> producers; ProducerTemplate inbound = producers .select(Uri.Literal.of("direct:inbound")) .get();
または エンドポイント
Bean の場合は、次のようになります。
@Any @Inject Instance<Endpoint> endpoints; MockEndpoint outbound = endpoints .select(MockEndpoint.class, Uri.Literal.of("mock:outbound")) .get();
同様に、@ContextName
修飾子に提供されたアノテーションリテラルを使用して、CamelContext
Bean を遅延検索できます。
@Any @Inject Instance<CamelContext> contexts; CamelContext context = contexts .select(ContextName.Literal.of("foo")) .get();
Camel コンテキストタイプに基づいて選択を絞り込むこともできます。
@Any @Inject Instance<CamelContext> contexts; // Refine the selection by type Instance<DefaultCamelContext> context = contexts.select(DefaultCamelContext.class); // Check if such a bean exists then retrieve a reference if (!context.isUnsatisfied()) context.get();
または、選択した Camel コンテキストを反復処理することもできます。たとえば、次のようになります。
@Any @Inject Instance<CamelContext> contexts; for (CamelContext context : contexts) context.setUseBreadcrumb(true);