Непонятное поведение SimpleEvaluationContext.forReadOnlyDataBinding () в SpEL - PullRequest
0 голосов
/ 08 декабря 2018

Я читаю справочные документы Spring 5.1.3, а Преобразование типов SpEL получает следующий пример кода:

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}.

Shouldnли выражение SpEL только для чтения и не меняет значение свойства?

1 Ответ

0 голосов
/ 08 декабря 2018

Содержимое поля является изменяемым, но само поле является неизменным.

т.е. вам не разрешено заменять booleanList новым массивом, но нет ничего, что могло бы помешать изменить содержимое существующего массива.

...