簡體   English   中英

是否可以在Spring中使用多個@Qualifier注釋?

[英]Is it possible to use multiple @Qualifier annotation in Spring?

我有一組以兩個屬性為特征的bean。 它們基本上是針對不同類和不同目的的序列化器。

例如,有可能是一個Order本地日志序列化, Order串行日志記錄Web服務調用, Customer串行跟蹤URL和Customer串行跟蹤URL。

這就是為什么我想使用這樣的兩個@Qualifier注釋:

@Autowired
@Qualifier("order")
@Qualifier("url")
private Serializer<Order> orderSerializer;

不幸的是,編譯器在這種情況下抱怨重復注釋。 是否有解決此問題的解決方法或替代解決方案?

我知道這個問題相當陳舊,但這是自Spring 2.5以來你應該能夠完成的事情。

您可以創建自己的注釋,這些注釋本身使用@Qualifier注釋,這是一種注釋組合形式。 春天會尊重這些資格賽,好像他們是自己的。

考慮這兩個注釋類型,命名與您的示例類似:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MyOrderQualifier {
}

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MyUrlQualifier {
}

您應該能夠在您的字段上使用這兩個注釋,因為它們是獨立的注釋。

@Autowired
@MyOrderQualifier
@MyUrlQualifier
private Serializer<Order> orderSerializer;

以下是解釋此過程的Spring 2.5參考文檔的鏈接。 請注意,它適用於Spring 2.5,可能會因更新版本的Spring而過時。

@Qualifier("order-url")

並分別命名您的組件order-url

@Component("order-url")

當然我不知道所有細節,但這個問題更像是Decorator模式的任務。 也許,如果有必要,你可以在Spring配置中綁定它。

或者,我同意Bozho的觀點,你可以在Spring bean中使用一些名稱約定,以便bean名稱可以反映其責任和應用領域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM