0

Ich frage mich nur, ob wir eine Meta-Annotation erstellen und sie überall wiederverwenden können. Zum Beispiel habe ich eine Anmerkung wie folgt:Wiederverwenden von Annotationen durch Erstellen von Meta-Annotationen

Ich muss es an mehreren Orten verwenden. Ich möchte nur, es wie etwas vereinfachen:

@MyFanoutExchangeBinding = @QueueBinding(value = @Queue, exchange = @Exchange(value = "MY_FANOUT_EXCHANGE", type = ExchangeTypes.FANOUT)) 

und dann überall die @MyFanoutExchangeBinding auf Methoden. Wenn ich Anmerkungen richtig verstehe, ist das nicht möglich. Oder ist es?

Antwort

1

Meta-Annotationen werden in diesem Kontext nicht funktionieren, da die @RabbitListenerbindings-Eigenschaft ein QueueBinding[] ist und Anmerkungen keine Vererbung haben.

Um es zu implementieren würde eine benutzerdefinierte RabbitListenerAnnotationBeanPostProcessor aber, da es nicht in einer generischen Weise getan werden kann, ich glaube nicht, dass es Teil des Frameworks sein kann, zumindest in der Art, wie Sie beschreiben.

Wir könnten aber in der Lage sein, das Boilerplate auf andere Weise zu reduzieren; Fühlen Sie sich frei, eine JIRA issue zu öffnen, und wir können einen Blick darauf werfen, was möglich sein könnte.

EDIT

Nach dem JIRA Issue Empfangen ich darüber nachgedacht etwas mehr und Sie können mit @RabbitListener ...

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@RabbitListener(bindings = @QueueBinding(
     value = @Queue, 
     exchange = @Exchange(value = "test.metaFanout", type = ExchangeTypes.FANOUT, autoDelete = "true"))) 
public @interface MyAnonFanoutListener { 
} 

public static class MetaListener { 

    @MyAnonFanoutListener 
    public void handle1(String foo) { 
     ... 
    } 

    @MyAnonFanoutListener 
    public void handle2(String foo) { 
     ... 
    } 

} 

Jede Ihre gewünschten Ergebnisse mit einem benutzerdefinierten Zuhörer Anmerkung, Meta-kommentierten erreichen Der Listener erhält eine an den Fanout-Austausch gebundene anonyme, automatisch löschende Warteschlange.