我正在使用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中的默认值)。
我无法在骆驼文档或谷歌上找到答案。有谁知道这个问题的答案?
答案 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正在缓存它在字段中创建的实例。