-1

我正在创建一个bean是spring如下

<bean id="xyz" class ="java.util.HashMap">
  <constructor-arg  value ="${somehashMapPaceholder}"
</bean>

当我运行它时,我得到如下错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personToDept' defined in class path resource [spring-configuration/application/appconfig-beans.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)

由于其他原因,我不想使用创建 hasmp。

4

2 回答 2

1

您必须为构造函数 args 提供索引号/名称,同时为构造函数赋值。即像下面

<bean id="test" class="java.util.HashMap">
    <constructor-arg>
        <map key-type="java.lang.String" value-type="java.lang.String">
            <entry key="Key 1" value="5" />
            <entry key="Key 2" value="6" />
        </map>
    </constructor-arg>
</bean>
于 2013-09-28T18:14:52.393 回答
0

可以在 spring 应用程序上下文中实现 HashMap 单例,并使用以下 util:map 在 IOC 之间共享。首先在架构中包含 xmlns:util。

    xmlns:util="http://www.springframework.org/schema/util"

然后定义您的共享地图:

<util:map id="sendCounts"
    key-type="java.Lang.String"
    value-type="com.mycompany.ToFromCount"
    map-class="java.util.HashMap">
</util:map>

然后在你的java源代码中:

    @Resource Map<String, ToFromCount> sendCounts;//needs to be in IOC for spring batch writer to use.

这会将您的 hashmap 键设置为 String,值是您定义的类。如果您希望该值是其他 POJO 或来自其他资源的类,只需使用该类作为值类型。然后注入地图的类将填充并访问地图。

在 Eclipse 中使用 Spring STS,您还可以使用漂亮的 bean 编辑器和您的应用程序 context.xml 文件进行设置。见下图。 Spring Bean 实用程序编辑器

希望这可以帮助。

于 2015-02-06T20:09:53.927 回答