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();
或用于 Endpoint beans,例如:
@Any
@Inject
Instance<Endpoint> endpoints;
MockEndpoint outbound = endpoints
.select(MockEndpoint.class, Uri.Literal.of("mock:outbound"))
.get();
同样,您可以使用 @ContextName 限定符为 lazily 查找 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);