繁体   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