4

私はCamelのSpringDSLを使用してルートを構築し、POJOBeanをプロセッサとして使用しています。

最初に、私は次のようにしています。

<bean ref="myPojoBeanProcessor"/>

ここで、「myPojoBeanProcessor」は私のSpringコンテキストでBeanとして定義されました。

次に、次のように切り替えました。

<bean beanType="com.mycompany.transformation.MyPojoBeanProcessor"/>

Java DSLに相当するものは、次のようになります。

from("xxx").bean(MyPojoBeanProcessor.class).xxx

後者のアプローチでは、Beanオブジェクトはリクエストごとにインスタンス化されるのでしょうか、それともBeanインスタンスがキャッシュされてシングルトンとして使用されるのでしょうか(Springのデフォルトのように)。

ラクダのドキュメントやグーグルで答えを見つけることができませんでした。誰かがこの質問への答えを知っていますか?

4

2 に答える 2

6

試してみませんか :)

Camel は、デフォルトの引数なしのコンストラクターを使用してインスタンスを 1 回作成し、インスタンスをキャッシュします (例: シングルトン スコープ)。

于 2012-05-24T03:38:20.817 に答える
3

MethodCallExpression#createExpression(CamelContext) の関連するコードは次のとおりです。

if (this.beanType != null)
{
  Expression answer;
  if (ObjectHelper.hasDefaultPublicNoArgConstructor(this.beanType)) {
    this.instance = camelContext.getInjector().newInstance(this.beanType);
    answer = new BeanExpression(this.instance, getMethod());
  } else {
    answer = new BeanExpression(this.beanType, getMethod());
  }
}

Camel は、作成したインスタンスをフィールドにキャッシュしています。

于 2012-05-24T21:09:35.093 に答える