Краткий ответ: Весна - это волшебство!
Для свойства Kotlin val
не обязательно означает, что свойство является постоянным.(Это не точный эквивалент Java final
здесь.) Это просто означает, что есть метод get()
, но нет метода set()
.
Это оставляет возможность для значения изменить каким-либо другим способом,(Например, свойство может иметь пользовательский метод получения, который возвращает разные значения.)
Я не совсем уверен, как Spring работает в своем волшебстве;он может быть в состоянии установить поле поддержки свойства напрямую, или он может создать скрытый подкласс, который может.В любом случае, он вполне способен установить val
свойства.(Вы также можете увидеть это в Hibernate.)