60.14. lazy Injection / Programmatic Lookup


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

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

例如,您可以将 @Uri qualifier 的提供的注解文字用于Lazily lookup for Camel primitives,如 ProducerTemplate Bean:

@Any
@Inject
Instance<ProducerTemplate> producers;

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

或 对于 Endpoint Bean,例如:

@Any
@Inject
Instance<Endpoint> endpoints;

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

同样,您可以使用 @ContextName qualifier 提供的注解文字为 CamelContext Bean 的 lazily 查找,例如:

@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