Составить пользовательскую аннотацию весны с параметром? - PullRequest
0 голосов
/ 02 мая 2019

возможно ли включить эту аннотацию

@RabbitListener(
    bindings = [QueueBinding(
        key = [Amqp.FOLEY_NEW],
        value = Queue(Amqp.FOLEY_NEW),
        exchange = Exchange(name = "amq.topic", type = ExchangeTypes.TOPIC  )
    )]
)

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

попробую, но я не вижу, что могу сослаться на Listener.value

@Target(AnnotationTarget.FUNCTION)
@Retention
@RabbitListener(
    bindings = [QueueBinding(
        key = [Amqp.FOLEY_NEW],
        value = Queue(Amqp.FOLEY_NEW),
        exchange = Exchange(name = "amq.topic", type = ExchangeTypes.TOPIC  )
    )]
)
annotation class Listener( val value: String )

1 Ответ

0 голосов
/ 02 мая 2019

Это не сработает, потому что пользовательская аннотация должна как-то ссылаться на метааннотацию.У @RabbitListener нет атрибута value().Хотя вы можете попробовать с @AliasFor.См. Его JavaDocs для получения дополнительной информации.

Тем не менее, я не уверен в вашей цели.Вы объявляете @RabbitListener с некоторым количеством bindings, и его результат будет использоваться в целевом контейнере слушателя.Любые дополнительные очереди (например, через queues()) также будут использоваться в контейнере, даже если вы сможете достичь дизайна с помощью @AliasFor.Это то, что вы ожидаете?

...