将springbean传递给Camel组件
我有一个类型为将springbean传递给Camel组件,spring,apache-camel,Spring,Apache Camel,我有一个类型为FooComponent的自定义组件,它通过以下行添加到路由中: from("foo://bar?args=values&etc") .bean(DownstreamComponent.class) ... FooComponent创建一个端点和消费者(类型为foocummer),该端点和消费者依次发出消息,这些消息到达下游组件和管道的其余部分 为了进行监视,我需要FooComponent使用者调用一个非Camel对象上的方法,我正在创建一
FooComponent
的自定义组件,它通过以下行添加到路由中:
from("foo://bar?args=values&etc")
.bean(DownstreamComponent.class)
...
FooComponent
创建一个端点和消费者(类型为foocummer
),该端点和消费者依次发出消息,这些消息到达下游组件和管道的其余部分
为了进行监视,我需要FooComponent
使用者调用一个非Camel对象上的方法,我正在创建一个springbean。Camel管道对性能非常敏感,因此我无法将FooComponent
分成两半,并将监视器调用作为Camel组件插入它们之间(我的首选解决方案,因为FooComponent
不必真正了解监视器)。我不愿意将方法调用转换为驼峰消息,稍后将由管道中的监控组件拾取,因为管道过滤稍后会变得复杂,我不想过度干预
在食品消费者
的某个地方,我有:
// in the class
@Autowired
Monitor monitor;
// inside the consumer's run method
monitor.noticeSomething();
问题是,monitor
永远不会设置为在应用程序的其余部分中创建的监视器bean。据我所知,这是因为Spring看不到FooConsumer
本身——这种类型的对象通常在FooComponent
中创建
那么,如何获取FooComponent
以找到它需要使用的Monitor
实例呢
- 创建路线时,我可以传递它吗?这似乎很棘手,因为定义是一个伪造的URL
”foo://bar?args=values&etc“
;我还没有发现如何以这种方式传递Java对象
- 我能让Spring在
FooConsumer
中找到@Autowired
注释并以某种方式注入监视器对象吗
最简单的方法是在FooComponent
类上创建一个Monitor
属性,并像任何其他bean一样连接它
<bean id="monitorBean" class="my.Monitor"/>
<bean id="foo" class="my.FooComponent">
<property name="monitor" ref="monitorBean"/>
</bean>
如果在每个端点的基础上更改监视bean,则可以使用Camel的漂亮的#
语法来定位具有该id的bean,并将其注入端点属性
foo:something?monitor=#monitorBean
然后在你的foodconsumer
中使用它,你只需说:
Monitor monitor = ((FooEndpoint) getEndpoint()).getMonitor();
最简单的方法是在FooComponent
类上创建一个Monitor
属性,并像其他bean一样连接它
<bean id="monitorBean" class="my.Monitor"/>
<bean id="foo" class="my.FooComponent">
<property name="monitor" ref="monitorBean"/>
</bean>
如果在每个端点的基础上更改监视bean,则可以使用Camel的漂亮的#
语法来定位具有该id的bean,并将其注入端点属性
foo:something?monitor=#monitorBean
然后在你的foodconsumer
中使用它,你只需说:
Monitor monitor = ((FooEndpoint) getEndpoint()).getMonitor();
如果您有Monitor的单例实例,您应该能够在FooComponent类中@Autowire它。当创建FooComponent时,Camel将允许Spring依赖项注入
然后,当您从组件创建端点/使用者时,可以传递监视器实例。如果您有监视器的单例实例,您应该能够在FooComponent类中@Autowire它。当创建FooComponent时,Camel将允许Spring依赖项注入
然后,当您从组件创建端点/使用者时,可以传递monitor实例。有趣的是,我们实际上没有使用XML配置。Java中有类似的工具吗?是的,只需直接在FooComponent上设置Monitor实例。谢谢Jake,我没有尝试过它,但它可能是自动连接的一个很好的替代方法。很有趣,但我们实际上没有使用XML配置。Java中是否有类似的工具?是的,只需直接在FooComponent上设置Monitor实例。谢谢Jake,我没有尝试过它,但它可能是自动布线的一个很好的替代方法。