春季

2013-09-28 264 views
-1

我创建一个bean创建的HashMap是春天如下春季

<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由于一些其他原因。

+0

can $ {somehashMapPaceholder}只能指向String吗?或者它可以指向一些其他的hashmap? $ {somehashMapPaceholder}是对我的其他一些hashmap的参考 – user93796

+0

您能否给我们一个更完整的例子,特别是'$ {somehashMapPaceholder}'来自哪里以及内容是什么?你为什么不使用ref而不是价值? –

+0

它从某些地方有一些地方有一些依赖,做它。但我不确定是否$ {somehashMapPaceholder}可以持有对另一个地图的引用?占位符可以指向其他地图吗? – user93796

回答

1

您必须给构造函数参数赋予索引号/名称,同时为构造函数赋予值。 即象下面

<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> 
+0

does not work – user93796

+0

@ user93796:请参阅已编辑的答案 –

+0

我想使用constructort,其中你可以传递另一个地图来创建地图。 = new HashMap(someothermap)。所以在春天someothermap是占位符 – user93796

0

一个HashMap单所用的弹簧的应用程序上下文来实现,并且使用以下的util横跨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. 

这就建立您的散列映射键是字符串,取值为一类你定义。如果你想让这个值成为某些其他POJO或类的其他资源,只需使用该类作为值类型即可。然后注入地图的类将填充并访问地图。

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

希望这会有所帮助。