Apache Camel POJO Bean处理器Singleton或Prototype?

时间:2012-05-23 21:21:00

标签: apache-camel

我正在使用Camel的spring DSL来构建路由,而我正在使用我的POJO bean作为处理器。

最初,我这样做:

<bean ref="myPojoBeanProcessor"/>

其中,'myPojoBeanProcessor'在我的spring上下文中定义为bean。

然后,我转到:

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

我认为Java DSL等价物是:

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

我想知道是否使用后面的方法,bean对象将被每个请求实例化,或者bean实例是否被缓存并用作单例(如spring中的默认值)。

我无法在骆驼文档或谷歌上找到答案。有谁知道这个问题的答案?

2 个答案:

答案 0 :(得分:6)

你为什么不试试呢?)

Camel将使用默认的no-arg构造函数创建一次实例,并缓存实例,例如其单例作用域。

答案 1 :(得分: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正在缓存它在字段中创建的实例。