19

春の地図に問題があり、涙が出ています。

私の春は次のようになります。

<?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:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
    ">

   <util:map id="mockMap">
        <entry key="userTest1" value="test1"/>
        <entry key="userTest2" value="test2"/>
        <entry key="userTest3" value="test6"/>
    </util:map>
</beans>

次に、これを自動配線しているコードは次のとおりです(無関係な部分は省略されています)。

@Autowired
@Resource(name="mockMap")
Map<String, String> testMap;

@Test
public void testGetGearListActivityOK() {
    for (String key : testMap.keySet()) {
        System.out.println("key = " + key);
    }
}

驚くべきことに、これにより、文字列タイプに一致するBeanがないというエラーが自動配線ステップで実際に発生します。ただし、単体テストでマップをマップとして定義するように変更すると、次の出力が得られます。

[junit] key = mockMap
[junit] key = org.springframework.context.annotation.internalConfigurationAnnotationProcessor
[junit] key = org.springframework.context.annotation.internalAutowiredAnnotationProcessor
[junit] key = org.springframework.context.annotation.internalRequiredAnnotationProcessor
[junit] key = org.springframework.context.annotation.internalCommonAnnotationProcessor
[junit] key = systemProperties
[junit] key = systemEnvironment
[junit] key = messageSource
[junit] key = applicationEventMulticaster
[junit] key = lifecycleProcessor

エントリのキーセクションを実際にキーとして表示することはまだできていません。マップをMapに戻し、春に追加すると、IDをキーとして使用して、マップにそれらが入力されます。

私はここでとても混乱していて、過去にかなりの量の春を使用しました。一体何がここで起こっているのか誰かが手がかりを持っているなら、私は非常に感謝するでしょう。

前もって感謝します。

また、私はこの質問を見ました:utilスキーマを使用してリストを自動配線するとNoSuchBeanDefinitionExceptionが発生します

しかし、解決策は、私がすでに行っている@Resourceを使用することです。

4

3 に答える 3

26

@Autowiredを削除し、@ Resource(name = "mockMap")のみを使用します

于 2012-09-07T19:22:38.680 に答える
1

そのようなコレクションを自動配線することはできません。

ただし、次のことを試すことができます。

@Resource(name="mockMap")
private Map<String, String> testMap;

あるいは:

@Value("#{mockMap}")
private Map<String, String> testMap;

春のドキュメント、ヒントのセクションを確認してください。

コレクションまたはマップタイプとして定義されているBeanは、タイプマッチングが適切に適用されないため、@Autowiredを介して注入することはできません。そのようなBeanには@Resourceを使用してください

于 2016-09-07T05:28:37.187 に答える
0

@Resourceのみを使用し、構成で「testMap」を「mockMap」に変更します

于 2013-11-26T07:17:50.147 に答える