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