60.14. lazy Injection / Programmatic Lookup


虽然 CDI 程序模型优先选择应用程序初始化时发生 的类型安全解析 机制,但可以在稍后使用 编程查找 机制在应用程序执行期间执行动态 / lazy 注入功能。

Camel CDI 提供与 CDI 限定符对应的注解文字,可用于标准注入 Camel 原语。这些注解文字可与 javax.enterprise.inject.Instance 接口结合使用,该接口是 CDI 入口点来执行 lazy 注入 / programmatic lookup。

例如,您可以使用为 @Uri qualifier 提供的注释文字,以 lazily 查找 Camel 原语,例如 ProducerTemplate Bean:

@Any
@Inject
Instance<ProducerTemplate> producers;

ProducerTemplate inbound = producers
    .select(Uri.Literal.of("direct:inbound"))
    .get();
Copy to Clipboard Toggle word wrap

或用于 Endpoint beans,例如:

@Any
@Inject
Instance<Endpoint> endpoints;

MockEndpoint outbound = endpoints
    .select(MockEndpoint.class, Uri.Literal.of("mock:outbound"))
    .get();
Copy to Clipboard Toggle word wrap

同样,您可以使用 @ContextName 限定符为 lazily 查找 CamelContext Bean 提供的注释,例如:

@Any
@Inject
Instance<CamelContext> contexts;

CamelContext context = contexts
    .select(ContextName.Literal.of("foo"))
    .get();
Copy to Clipboard Toggle word wrap

您还可以根据 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();
Copy to Clipboard Toggle word wrap

甚至迭代特定的 Camel 上下文,例如:

@Any
@Inject
Instance<CamelContext> contexts;

for (CamelContext context : contexts)
    context.setUseBreadcrumb(true);
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat