在我的Grails應用程序中,我試圖在resources.groovy
中定義一個需要Map類型的構造函數arg的Spring bean。我嘗試這樣做:用Map-typed構造函數參數定義Spring bean
Map<Class, String> mapArg = [(String): 'foo']
myBean(MyBeanImpl, mapArg)
但我得到的錯誤信息:
org.springframework.beans.factory.BeanCreationException:錯誤 創建名爲 '爲myBean' 豆:無法解析匹配 構造(提示:指定索引/類型/名稱參數爲簡單 參數,以避免歧義類型)
實現類具有單一的構造,其是這樣定義
MyBeanImpl(Map<Class, String> map) {
// impl omitted
}
我的猜測是,這個問題是由我定義一個構造函數一個Map
ARG具有相同簽名的默認構造函數的Groovy增加了每類造成的事實。
如果是這樣,一個解決方案似乎是添加一個工廠方法,如
MyBean getInstance(Map map) {
// impl omitted
}
但我不知道我怎麼能叫這種方法來定義一個bean(在resources.groovy
)是從構建一個需要參數的工廠方法。
這應該工作。一個輕微的皺紋是,你需要用圓括號將映射定義爲'[(String):'foo']',以便將'Class'對象用作映射鍵而不是字符串「String」,但是我不' t認爲泛型類型參數在決定構造函數是否匹配時很重要。 –
@IanRoberts在代碼本身,我確實有括號括在類的原因你說。我更新了我的問題,很好看。 –