使用@Component将一个键映射到多个值

时间:2018-03-16 09:57:54

标签: java spring hashmap annotations

我想从面向组件的地图中使用旧的util:map XML注释。我在这个问题上磕磕绊绊。我已经设法改变第一个,使用这种类型的配置:

映射的bean:

@Autowired
private Map<String, MyType>    typeMap;

对于每个Bean:

@Component("firstType")
public FirstType implements MyType    {}

然后简单地呼叫:

typeMap.get("firstType");

就像一个魅力。但是,这是其他地图的实现方式:

<util:map id="routingMap">
    <entry key="one" value-ref="firstReference" />
    <entry key="two" value-ref="firstReference" />
    <entry key="three" value-ref="firstReference" />
    <entry key="four" value-ref="secondReference" />
    <entry key="five" value-ref="secondReference" />
    <entry key="six" value-ref="secondReference" />
    <entry key="seven" value-ref="thirdReference" />
    <entry key="eight" value-ref="secondReference" />
    <entry key="nine" value-ref="secondReference" />
</util:map>

如您所见,有多个键引用firstReferencesecondReference。有没有办法用这样的注释模拟这个:

@Component(values = "one", "two", "three")

并取得类似的结果?或者使用Spring注释无法做到这一点?

1 个答案:

答案 0 :(得分:0)

使用@Component无法做到这一点,此https://jira.spring.io/browse/SPR-6736有一张打开的彩票。

但是,您可以使用@Bean来实现此目的 从您的实现类中删除@Component

public FirstType implements MyType    {}

像这样创建一个配置类

@Configuration
Class Config {

   @Bean(name = "one", "two", "three")
   public FirstType myFirstTypeMethod() {
      return new FirstType();
   }
}