首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpelExpression线程安全吗?

SpelExpression线程安全吗?
EN

Stack Overflow用户
提问于 2014-07-11 00:17:04
回答 1查看 1.5K关注 0票数 4

具体地说,getValue(StandardEvaluationContext,Class)能否安全地从具有不同上下文的同一SpelExpression上的多个线程调用?

我看到来自Spring Source的Gary Russell提出并回答了这个问题。然而,我也看到人们报告并发问题。我浏览了相关Spring类的源代码,但我不能确定。

我希望从使用过spring-el的Spring开发人员或在高并发环境中使用过这个类的Spring用户那里得到一个明确的答案。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-07-11 04:56:23

我知道你想要另一种观点,但我要澄清的是,它是线程安全的,只要你在另一个线程使用它的时候不改变求值上下文(或者每次你都使用一个新的求值上下文,如果你需要用变量等来自定义它),

但是,您必须将根对象传递给getValue(),而不是在上下文上设置根对象(使用setRootObject() -这会改变上下文)。如果有#root对象,请使用

代码语言:javascript
复制
getValue(EvaluationContext context, Object rootObject, Class<T> expectedResultType)

如果您没有根对象,并且不会以其他方式改变上下文,那么可以使用

代码语言:javascript
复制
getValue(EvaluationContext context, Class<T> expectedResultType) 

具有共享的上下文。

Spring Integration在(很多情况下)高度多线程的环境中广泛使用了SpEL。我们对所有静态情况(没有运行时变量)使用相同的求值上下文,并将根对象(通常是消息)传递给getValue()调用。对于需要向上下文添加变量的情况,每个评估都会获得一个新的评估上下文。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24681567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档