【问题标题】:Apache Camel POJO Bean Processor Singleton or Prototype?Apache Camel POJO Bean 处理器单例还是原型?
【发布时间】:2012-05-23 21:20:59
【问题描述】:

我正在使用 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 中的默认值一样)。

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

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    你为什么不试试看:)

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

    【讨论】:

    • 我就是这么想的。只需要确认我的结论。 (见下面我的回答)谢谢@Claus!
    【解决方案2】:

    这是 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 正在缓存它在字段中创建的实例。

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      相关资源
      最近更新 更多