在Apache Camel中使用Guice

4
我正在使用带有camel-guice的Apache Camel 2.11.1,但我无法弄清如何引导自启动的bean。
使用camel-context.xml,我可以编写:
<beans xmlns="http://www.springframework.org/schema/beans" ...
    <camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-camel-context">
        <camel:packageScan>
            <camel:package>package.routes</camel:package>
        </camel:packageScan>        
    </camel:camelContext>

    <bean id="fooBean" class="package.beans.FooBean" />

    <bean id="barBean" class="package.beans.BarBean" >
        <constructor-arg ref="fooBean"/>
        <constructor-arg ref="my-camel-context"/>
    </bean>
...
</beans>

BarBean.class

public class BarBean implements SmartLifecycle, StartupListener {
...
}

“骆驼调用了在BarBean中实现的钩子,但我该如何使用guice解决这个问题?”
“编辑:我正在使用org.apache.camel.guice.Main启动我的骆驼。”
1个回答

1
如果您正在使用GuiceCamel,那么您应该通过CamelModule来配置应用程序,对吗?
然后,CamelModule会使用wikipedia:JSR250JSR250,它是Java平台通用注释的官方规范。
因此,您可以自由地使用它们来管理对象生命周期。
要启动应用程序,您的主函数应该像这样:
final Injector inj = Guice.createInjector(new MyCamelModule());
    Main main = new Main() {
      @Override
      protected Injector getInjectorFromContext() throws Exception {
        return inj;
      }
    };
    main.enableHangupSupport();
    main.run(args);

您的 MyCamelModule 应该包含绑定您的 bean。看起来您的 bean 只是已经实现了,所以您需要做的就是在您的 bean 构造函数中添加 @Inject

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接