検索

57.14. Lazy Injection / Programmatic Lookup

download PDF

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);
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.