2

SpringベースのScalaプロジェクトを作成しています。私のオブジェクトの1つには、単純なMap[String, String]注入が必要です。私は次のコードを持っています:

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のマップ]:この依存関係のautowire候補として適格な少なくとも1つのBeanが必要です。

キーと値の型をとして明示的に宣言しようとしましjava.lang.Stringたが、効果がありませんでした。私が間違っているかもしれないアイデアはありますか?

4

1 に答える 1

4

私はこれを自分で知りませんでしたが、実際にこれを見つけました:

このセマンティックの違いの具体的な結果として、それ自体がコレクションまたはマップ タイプとして定義されている Bean は、タイプ マッチングが適切に適用されないため、@Autowired を介して注入できません。特定のコレクション/マップ Bean を一意の名前で参照して、そのような Bean に @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>

そしてそれはうまくいきました。

于 2012-08-14T18:06:53.543 に答える