2016-12-09 3 views
2

私は最近、SpringのXML構成をJavaの構成に切り替えて、奇妙な問題に直面しています。Spring Javaのコンフィグレーションされたマップをラップする

XML設定されました:

<util:map id="myMap"> 
    <entry key="a" value="aValue"/> 
    <entry key="b" value="bValue"/> 
    <entry key="c" value="cValue"/> 
</util:map> 

<bean id="myBean" class="my.MyClass"> 
    <property name="myMap" ref="myMap"/> 
</bean> 

Java構成は次のとおりです。

@Bean 
public Map<String, Object> myMap() { 

    Map<String, Object> myMap = new HashMap<>(); 
    myMap.put("a", "aValue"); 
    myMap.put("b", "bValue"); 
    myMap.put("c", "cValue"); 

    return myMap; 
} 

@Bean 
public MyClass myBean(@Qualifier("myMap") final Map<String, Object> myMap) { 

    MyClass myBean = new MyClass(); 
    myBean.setMyMap(myMap); 

    return myBean; 
} 

どちら豆は異なるファイルで宣言されている、私は、読みやすくするためにここでそれらをグループ化。このマップには、文字列だけでなく、参照も含まれています。

私は2番目のBeanに myMapを使用することができることを期待する代わりに、春には、次のマップ注入

{ myMap = { a=aValue, b=bValue, c=cValue } } 

春が別のマップにマップをラップ理由を私は理解していないが、それはdoesnの理由XML構成でも同じように動作します。

アイデア?

+0

@Resourceをここで使用しているように使用することもできます:http://stackoverflow.com/questions/13913752/spring-cant-autowire-map-bean? – Walfrat

+0

残念ながら、これらのBeanは異なるファイル/異なるモジュールに存在するため、 '@ Resource'ソリューションは使用できません。 '@ Resource'を使用すると、モジュールのコンテキスト間に循環参照ループが発生します。 –

答えて

2

でもBean名を定義する地図を-ing問題@Autowiredがあり、あなたが提案@Resourceアノテーションを使用することはできませんコメントとして-あたりの代替は、Bean名を定義する@Value注釈を使用してありますので:

@Bean 
public MyClass myBean(@Value("#{myMap}") final Map<String, Object> myMap) { 
//.. 
} 
+0

それはトリックでした!ありがとう! –

関連する問題