2012-08-14 92 views
2

我正在创建一个基于Spring的Scala项目。我的一个物体需要注入一个简单的Map[String, String]。我有以下代码:为什么这个Spring映射不能注入到我的Scala对象中?

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:device="http://www.springframework.org/schema/mobile/device" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
     http://www.springframework.org/schema/mobile/device http://www.springframework.org/schema/mobile/device/spring-mobile-device-1.0.xsd"> 

    <util:map id="validHosts"> 
    <entry key="host1.domain.com" value="queue-1" /> 
    <entry key="host2.domain.com" value="queue-2" /> 
    </util:map> 

</beans> 

HostMapper.Scala

import scala.collection.JavaConversions._ 

import org.springframework.beans.factory.annotation.Autowired 
import org.springframework.stereotype.Component 

@Component 
class HostMapper() { 

    @Autowired private var validHosts:java.util.Map[String, String] = null 

} 

当运行这个程序,我启动时获取以下错误:

org.springframework.beans.factory .NoSuchBeanDefinitionException:找不到匹配[java.lang.String]类型的匹配bean,用于依赖性[值类型为java.lang.String的映射]:预期的a至少有1个bean符合此依赖关系的自动导向候选。

我试图明确声明键和值类型为java.lang.String,但这没有效果。任何想法我可能做错了什么?

+0

尝试放置二传手? – pedrofurla 2012-08-15 03:14:08

回答

4

我没有这个认识自己,发现这实际上是:

由于这种语义差异的具体结果,这是他们自己定义为一个集合或地图类型无法通过@Autowired因为类型匹配注入豆并不适用于他们。使用@Resource这种豆,通过唯一的名称

指特定集合/地图豆,我试用了一下,而不是

@Autowired 

我用:

@Resource 
private Map<String, String> validHosts; 


<util:map id="validHosts" key-type="java.lang.String" value-type="java.lang.String"> 
    <entry key="host1.domain.com" value="queue-1" /> 
    <entry key="host2.domain.com" value="queue-2" /> 
</util:map> 

它工作。

相关问题