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 中的默认值)。

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

4

2 回答 2

6

你为什么不试试看:)

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

于 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 回答