【问题标题】:creating hashmap in spring在春季创建哈希图
【发布时间】:2013-09-28 18:12:03
【问题描述】:

我正在创建的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。

【问题讨论】:

  • ${somehashMapPaceholder} 可以只指向字符串吗?还是可以指向其他哈希图?在我的例子中,${somehashMapPaceholder} 是对其他哈希图的引用
  • 你能不能给我们一个更完整的例子,特别是${somehashMapPaceholder}来自哪里,内容是什么?为什么不使用 ref 而不是 value?
  • 它有些地方有一些依赖性。但不确定 ${somehashMapPaceholder} 是否可以引用另一张地图?占位符可以指向其他地图吗?
  • @LeonardBrünings 你能帮我解决这个问题吗
  • 您可以使用ref 属性来引用上下文中的另一个bean。

标签: java spring dependency-injection hashmap


【解决方案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>

【讨论】:

  • 我想使用构造函数,你可以传递另一个地图来创建地图。例如 mp = new HashMap(someothermap) 。所以在春天 someothermap 是占位符
  • 是的,我试过 工作正常..让我试试占位符会更新你
  • 遇到了问题。占位符被解析为字符串而不是对象。
【解决方案2】:

可以在 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 文件进行设置。见下图。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2012-03-04
    • 2012-02-17
    • 1970-01-01
    • 2013-12-20
    • 2013-03-05
    • 2014-03-27
    • 2021-02-21
    相关资源
    最近更新 更多