Apache Camel中的POJO Bean处理器是单例还是原型?

4
我是使用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中的默认设置)。

我在camel文档或谷歌上找不到答案。有人知道这个问题的答案吗?

2个回答

6

你为什么不试一下呢 :)

Camel会使用默认的无参构造函数创建一个实例,并将该实例缓存,例如它是单例作用域。


这正是我所想的。只是需要确认我的结论。(请看下面我的回答)谢谢@Claus! - nemo

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());
  }
}

骆驼在创建实例时会将其缓存在一个字段中。

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