4

タイプ CustomerApiLink の Spring Bean がいくつかあります。これらの Bean の名前は、それぞれ「ableCustomer」、「bravoCustomer」、および「charlieCustomer」です (これは単なる例です)。次に、それらすべてを Map に挿入します

//DI through annotation
@Inject
private Map<String,CustomerApiLink> apis;

しかし、デフォルトでは、Spring IoC コンテナーは常にその名前をマップ キーとして使用することがわかりました。これをオーバーライドして、次のマップを取得します。

できる-> bean ref="ableCustomer";

ブラボー-> bean ref="bravoCustomer";

charlie-> bean ref="charlieCustomer";

注釈でこれを行うことは可能ですか? または、xml ファイルに別のユーティリティ Bean を作成する必要がありますか?

4

2 に答える 2

3

私はこれを何度もやりました。私は通常@InjectSetコンストラクターまたはセッターに必要なオブジェクトの を作成しMap、その時点で を作成します。

public class MyObject {
    private Map<String, CustomerApiLink> apiLinks;

    @Inject
    public MyObject(Set<CustomerApiLink> apis) {
        apiLinks = new HashMap<String, CustomerApiLink>();
        for(CustomerApiLink api : apis) {
            apiLinks.put(api.getName(), api);
        }
    }
}

もちろん、このソリューションでは、CustomerApiLinkオブジェクトからキーを取得する方法が必要です。この場合、呼び出されたメソッドgetName()が存在すると仮定しました。

于 2012-11-09T15:46:05.103 に答える
0

XML は必要ありませんが、フィールドの代わりにセッター メソッドに注釈を付けて、メソッドで提供されたマップを自分で処理できます。

@Inject
public void setApis(Map<String,CustomerApiLink> apis){
    this.apis = new HashMap<String,CustomerApiLink>();
    // now copy values from the incoming map to your internal map
    // using keys of your own choice
}
private Map<String,CustomerApiLink> apis;
于 2012-11-09T15:39:43.420 に答える