如何使用Spring声明Camel Producer bean

时间:2014-02-12 08:48:54

标签: spring apache-camel

我是spring和Camel的新手,并且很难理解Camel bean集成的这部分内容:

“如果在Spring XML中定义bean或使用Spring组件扫描机制扫描并使用a或CamelBeanPostProcessor,那么我们将处理许多Camel注释”

我在Spring上下文文件中声明了一个Camel上下文,并将其部署为OSGI包:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="timer://myTimer?fixedRate=true&amp;period=2000"/>
            <to uri="log:ExampleRouter"/>
        </route>
    </camelContext>

</beans>

在一个单独的包中,我有现有的需要生成内容的java代码,并且我插入了一个@Producer字段注释。在第二个包中我已经声明了一个Spring bean ...但是POJO已经存在了,我不希望/希望Spring实际实例化它:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <bean id="CrudEditManager" class="com.acme.editmgr.internal.EditManagerServiceImpl"/>
</beans>

因为它没有处理@Producer注释,我不太清楚我应该如何将CamelBeanPostProcessor指向我的POJO的现有实例? Camel路由开始正常,对于第二个bundle我在日志中看到了这个:

defining beans [CrudEditManager]; root of factory hierarchy

...所以正在加载配置文件,但是有一些我想不通的缺少布线。

谢谢!

==========编辑============ 进一步研究这一点,如果没有使用Aspect Weaver,我显然需要使用spring托管bean来使这些注释工作。它似乎在OSGI上下文中我应该从我的Camel包启动的Spring应用程序上下文中获取bean。 所以我用这个java代码替换了我的POJO中的@Produce注释:

    Dictionary<String,String> filter = new Hashtable<>();
filter.put("org.springframework.context.service.name",
                   <name of my camel bundle");
tracker = ServiceHelper.create(context, ApplicationContext.class, filter);
        producer = tracker.getService().getBean(CrudEditProducer.class);

我想知道是否有一种更简单的方法可以从POJO桥接到spring托管bean空间?

0 个答案:

没有答案