Kotlin расширение аннотаций пружинных ботинок - PullRequest
0 голосов
/ 09 июля 2020

С Kotlin я могу сохранить значения по умолчанию в аннотации уровня класса, например

@Profile("dev", "staging", "production")
annotation class RemoteProfile

Мне любопытно, есть ли способ добиться чего-то подобного с аннотациями параметров - например, я ' Мне нравится иметь возможность делать что-то вроде:

fun someHandler(@AccountParam account: Account) {
   ...
}

Где под пружиной это интерпретируется как

fun someHandler(@RequestAttribute("ACCOUNT") account: Account) {
   ...
}

1 Ответ

0 голосов
/ 09 июля 2020

Идея, которую вы ищете, - это мета-аннотация . Причина, по которой ваш первый пример работает, не имеет ничего общего с Kotlin и является особенностью Spring, где Spring активно проверяет иерархию аннотаций. Начиная с Javado c для Profile:

Аннотацию @Profile можно использовать любым из следующих способов:

  • в качестве метааннотации, с целью создания пользовательских аннотаций стереотипов

Аннотации MVC RequestAttribute и RequestParam не поддерживают мета -аннотация. Вы можете определить свои собственные HandlerMethodArgumentResolver s для поддержки этого (это не ужасно сложно, и вы можете создать подкласс RequestAttributeMethodArgumentResolver), но вы не можете просто метааннотировать в целом.

(Groovy s AnnotationCollector поддерживает это, но это реализовано путем «разворачивания» во время компиляции, и я не верю, что Kotlin имеет эквивалентную функцию.)

...