gpt4 book ai didi

spring - 使用 Map 类型的构造函数参数定义 Spring bean

转载 作者:行者123 更新时间:2023-12-02 13:58:00 27 4
gpt4 key购买 nike

在我的 Grails 应用程序中,我试图在 resources.groovy 中定义一个 Spring bean,它需要一个 Map 类型的构造函数 arg。我试过这个:

Map<Class, String> mapArg = [(String): 'foo']
myBean(MyBeanImpl, mapArg)

但我收到错误信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myBean': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

实现类有一个这样定义的构造函数

MyBeanImpl(Map<Class, String> map) {
// impl omitted
}

我的猜测是,问题是由于我定义了一个构造函数,该构造函数采用单个 Map arg,它与 Groovy 添加到每个类的默认构造函数具有相同的签名。

如果是这样,一个解决方案似乎是添加一个工厂方法,例如

MyBean getInstance(Map map) {
// impl omitted
}

但我不确定如何调用它来定义一个从需要参数的工厂方法构造的 bean(在 resources.groovy 中)。

最佳答案

据我所知,您使用的语法应该有效。替代语法:

Map<Class, String> mapArg = [(String): 'foo']
myBean(MyBeanImpl) { bean ->
bean.constructorArgs = [mapArg]
}

在你的情况下工作得更好吗?如果做不到这一点,将 map 本身声明为 bean 绝对应该这样做:

import org.springframework.beans.factory.config.MapFactoryBean

classMap(MapFactoryBean) {
sourceMap = [(String):'foo']
}

myBean(MyBeanImpl, classMap /* this is a RuntimeBeanReference */)

关于spring - 使用 Map 类型的构造函数参数定义 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com