59.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);