簡體   English   中英

Java / Spring:用XML“標記”bean以按類和標記獲取特定的bean

[英]Java / Spring: “Tagging” beans in XML to get specific bean by class and tag

我有幾個文件制作的大型XML配置。

我需要讓bean實現特定的接口。 但有幾個實現,所以我必須選擇。 我想用特殊的“標簽”標記bean來輕松獲取它:

<bean class="myInterfaceImpl1" tag="beanForMe" />
<bean class="myInterfaceImpl2" />
<bean class="myInterfaceImpl3" />

T get(Class<T> clazz) {
    return factory.getBean(clazz, "beanForMe"); //Returns first one 
}

春天有類似的東西嗎?

我找到了2個解決方法。 首先是使用特殊標簽ID:

第一

<bean class="myInterfaceImpl1" id="MyInterface-beanForMe" />

但是當我在My IDE中重命名類時,除非我編寫IDE插件來支持我的想法,否則一切都會失敗。

其次是將所有“標記”bean添加到特定列表,通過id獲取它,然后遍歷它以找到適當的bean。

但標簽在這里是最好的。 你怎么看?

對於這個目的,Spring有一個限定符的概念:

<bean class="myInterfaceImpl1">
    <qualifier value = "beanForMe" />
</bean> 

不幸的是,它們僅用於自動裝配,但您可以手動訪問它們,盡管它會非常難看:

ConfigurableListableBeanFactory cbf = ((ConfigurableListableBeanFactory) factory);
BeanDefinition bd = cbf.getBeanDefinition(name);
AutowireCandidateQualifier q = ((AbstractBeanDefinition) bd).getQualifier(Qualifier.class.getName());
String value = (String) q.getAttribute(AutowireCandidateQualifier.VALUE_KEY);

暫無
暫無

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

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