SpEL中的SimpleEvaluationContext.forReadOnlyDataBinding()令人困惑的行为

时间:2018-12-08 01:24:14

标签: spring-el

我正在阅读Spring 5.1.3参考文档,SpEL Type Conversion得到了以下示例代码:

class Simple {
    public List<Boolean> booleanList = new ArrayList<Boolean>();
}

Simple simple = new Simple();
simple.booleanList.add(true);

EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();

// false is passed in here as a string. SpEL and the conversion service
// correctly recognize that it needs to be a Boolean and convert it
parser.parseExpression("booleanList[0]").setValue(context, simple, "false");

// b is false
Boolean b = simple.booleanList.get(0);

它可以作为上述文档使用,并更改属性的值,但根据Javadocs forReadOnlyDataBinding()

  

创建一个{@code SimpleEvaluationContext},以便通过{@link DataBindingPropertyAccessor}只读访问公共属性。

SpEL表达式不是只读的,并且不更改属性值吗?

1 个答案:

答案 0 :(得分:0)

该字段的内容是可变的,但该字段本身是不可变的。

即您不允许将booleanList替换为新数组,但不能阻止现有数组的内容发生突变。