4

我正在使用 Apache Camel 2.11.1 和 camel-guice,但我不知道如何引导 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 {
...
}

Camel 调用了 BarBean 中实现的钩子,但是如何使用 guice 解决这个问题?

编辑:我正在使用 org.apache.camel.guice.Main 来启动我的骆驼。

4

1 回答 1

1

如果您正在使用CamelGuice您正在通过 配置您的应用程序CamelModule,对吗?

然后CamelModule使用wikipedia:JSR250JSR250,它是 JavaTM 平台通用注释的正式规范。

因此,您可以自由地使用它们来管理对象生命周期。

要引导您的应用程序,您的主要外观如下所示:

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应该包含bind你的豆子。看起来你的 bean 刚刚实现,所以你要做的一切都放在@Inject你的 beans 构造函数中。

于 2013-11-08T16:21:02.497 回答