0

メタ注釈を作成してどこにでも再利用できるかどうかは不思議です。たとえば、次のような注釈があります。メタ注釈を作成して注釈を再利用する

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

複数の場所で使用する必要があります。

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

して、どこにでも法に@MyFanoutExchangeBindingを使用する:私はちょうどそれをのようなものを簡素化します。注釈が正しく理解できれば、それは不可能です。またはそれは?

答えて

1

@RabbitListenerbindingsのプロパティがQueueBinding[]であり、アノテーションに継承がないため、このコンテキストでメタアノテーションは機能しません。

実装するには、RabbitListenerAnnotationBeanPostProcessorをカスタマイズする必要がありますが、一般的な方法ではできないため、少なくともあなたが記述した方法では、フレームワークの一部とは思えません。

しかし、別の方法でボイラープレートを減らすことはできますが、 JIRA issueを自由に開いて、可能な可能性を見てみましょう。

EDIT

@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) { 
     ... 
    } 

} 

各...メタ注釈付き@RabbitListenerと、私はいくつかのより多くのそれについて考え、あなたがカスタムリスナーアノテーションを使用して、所望の結果を達成することができJIRA Issueを受信した後、リスナーはファンアウト交換機にバインドされた匿名の自動削除キューを取得します。