60.8. Camel bean 集成
60.8.1. Camel 注解
作为 Camel Bean 集成 的一部分,Camel 附带了一组由 Camel CDI 无缝支持 的注解。因此,您可以在 CDI Bean 中使用任何这些注解,例如:
Camel 注解 | CDI 等效 | |
---|---|---|
配置属性 |
@PropertyInject("key") String value; | 如果使用 DeltaSpike 配置机制 : @Inject @ConfigProperty(name = "key") String value; 如需了解更多详细信息,请参阅配置属性。 |
生成者模板注入(默认 Camel 上下文) |
@Produce(uri = "mock:outbound") ProducerTemplate producer; @Produce(uri = "mock:outbound") FluentProducerTemplate producer; |
@Inject @Uri("direct:outbound") ProducerTemplate producer; @Produce(uri = "direct:outbound") FluentProducerTemplate producer; |
端点注入(默认 Camel 上下文) |
@EndpointInject(uri = "direct:inbound") Endpoint endpoint; |
@Inject @Uri("direct:inbound") Endpoint endpoint; |
端点注入(按名称为Camel 上下文) |
@EndpointInject(uri = "direct:inbound", context = "foo") Endpoint contextEndpoint; |
@Inject @ContextName("foo") @Uri("direct:inbound") Endpoint contextEndpoint; |
Bean 注入(按类型) |
@BeanInject MyBean bean; |
@Inject MyBean bean; |
Bean 注入(按名称) |
@BeanInject("foo") MyBean bean; |
@Inject @Named("foo") MyBean bean; |
POJO 消耗 |
@Consume(uri = "seda:inbound") void consume(@Body String body) { //... } |
60.8.2. Bean 组件
您可以使用 Java Camel DSL 根据类型或名称来引用 CDI Bean,例如使用 Java Camel DSL:
class MyBean { //... } from("direct:inbound").bean(MyBean.class);
或根据名称从 Java DSL 查找 CDI Bean:
@Named("foo") class MyNamedBean { //... } from("direct:inbound").bean("foo");
60.8.3. 从 Endpoint URI 引用 Bean
当使用 URI 语法配置端点时,您可以使用 #
表示法引用 Registry 中的 Bean。如果 URI 参数值以 #
符号开头,则 Camel CDI 将按名称查找给定类型的 bean,例如:
from("jms:queue:{{destination}}?transacted=true&transactionManager=#jtaTransactionManager").to("...");
将以下 CDI Bean 符合 @Named ("jtaTransactionManager")
:
@Produces @Named("jtaTransactionManager") PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) { JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(); jtaTransactionManager.setUserTransaction(userTransaction); jtaTransactionManager.setTransactionManager(transactionManager); jtaTransactionManager.afterPropertiesSet(); return jtaTransactionManager; }