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 を使用してキャメルを起動しています。

4

1 に答える 1

1

を使用CamelGuiceている場合は、 を介してアプリケーションを構成していますよCamelModuleね?

次に、JavaTM プラットフォームの共通アノテーションの公式仕様であるwikipedia:JSR250またはJSR250CamelModuleを使用します。

したがって、それらを自由に使用してオブジェクトのライフサイクルを管理できます。

アプリケーションをブートストラップするには、メインは次のようになります。

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が含まれている必要があります。bindBean が実装されたばかりのように見えるので、やらなければならないことはすべて@InjectBean コンストラクターに入れられます。

于 2013-11-08T16:21:02.497 に答える