Контейнер Bean для прозрачного прокси получить / установить в контейнер - PullRequest
1 голос
/ 09 апреля 2019

У меня есть класс данных оболочки Kotlin, цель которого - обернуть произвольные значения дополнительной информацией об их состоянии. Для целей этого вопроса, что-то вроде этого будет достаточно:

data class Wrapper<T>(val content: T)

К сожалению, иногда (в частности, в путях нарушения ограничений проверки javax) Spring пытается получить прямой доступ к вложенным свойствам:

data class Name(val first: Wrapper<String>)
data class Person(val name: Wrapper<Name>)

val foo = Person(Wrapper(Name(Wrapper("Steve"))))

Очевидно, что для значения типа foo путь свойства name.first не определен, так как вместо него должно быть name.content.first.content. Поэтому, если Spring получает, скажем, ConstraintViolation с путем name.first (мы написали валидатор для создания путей для Wrapper таким образом), он пытается получить доступ к этому пути на foo. foo имеет name, но это Wrapper, который имеет только content, а не first, поэтому Spring вызывает исключение.

Есть ли способ сообщить Spring, что все значения типа Wrapper имеют те же поля, что и их content? Это похоже на AOP и Прокси, но я не могу понять, как сделать Wrapper Прокси, и если это вообще возможно.

...