60.11. Camel XML 配置导入
从 Camel 2.18 开始提供
虽然 CDI 优先使用类型安全依赖关系注入机制,但将现有 Camel XML 配置文件重复利用到 Camel CDI 应用程序可能很有用。 在其他用例中,可能很方便地依赖 Camel XML DSL 来配置其 Camel 上下文。
您可以使用任何 CDI Bean 和 Camel CDI 上 Camel CDI 提供的 @ImportResource 注解将自动在指定位置载入 Camel XML 配置,例如:
@ImportResource("camel-context.xml")
class MyBean {
}
Camel CDI 将在类路径中指定的位置加载资源(以后可能会添加其他协议)。
来自导入的资源的每个 CamelContext 元素和其他 Camel 原语 会在容器 bootstrap 中自动部署为 CDI Bean,以便它们可从 Camel CDI 提供的自动配置中受益,并在运行时被注入。如果这个元素设置了显式 id 属性,则对应的 CDI bean 与 @Named qualifier (如以下 Camel XML 配置)授权:
<camelContext id="foo">
<endpoint id="bar" uri="seda:inbound">
<property key="queue" value="#queue"/>
<property key="concurrentConsumers" value="10"/>
</endpoint>
<camelContext/>
对应的 CDI Bean 被自动部署,并可注入,例如:
@Inject
@ContextName("foo")
CamelContext context;
@Inject
@Named("bar")
Endpoint endpoint;
请注意,CamelContext Bean 会自动与 @Named 和 @ContextName 限定符一起自动授权。 如果导入的 CamelContext 元素没有 id 属性,则对应的 bean 将使用内置 @Default qualifier 部署。
相反,应用程序中部署的 CDI Bean 可以从 Camel XML 配置引用,通常使用 ref 属性,例如,在声明了以下 bean 时:
@Produces
@Named("baz")
Processor processor = exchange -> exchange.getIn().setHeader("qux", "quux");
在导入的 Camel XML 配置中可以声明对该 bean 的引用,例如:
<camelContext id="foo">
<route>
<from uri="..."/>
<process ref="baz"/>
</route>
<camelContext/>