我是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&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空间?