Spring HashMap value-ref Key指向值ref name

时间:2016-09-07 04:03:13

标签: spring hashmap

这是我在Spring上下文中使用value-ref:

的HashMap
<util:map id="generalDAOMap" map-class="java.util.HashMap">
        <entry key="1" value-ref="userDAO" />
        <entry key="2" value-ref="accountsDAO" />
        <entry key="3" value-ref="settingsDAO" />       
</util:map>
<bean id="userDAO"
        class="com.test.myproj.dao.impl.UserDAOImpl" />
<bean id="accountsDAO"
        class="com.test.myproj.dao.impl.AccountsDAOImpl" />
<bean id="settingsDAO"
        class="com.test.myproj.dao.impl.SettingsDAOImpl" />

在我的Java课程中,我已经自动安装了“generalDAOMap”,如下所示:

@AutoWired

private Map<String,GeneralDAO> generalDAOMap;

//getters and setters follows

当我打印地图值时,如下所示:

{userDAO = com.test.myproj.dao.impl.UserDAOImpl@164d6ae,accountsDAO = com.test.myproj.dao.impl.AccountsDAOImpl@ed9382 , settingsDAO = com.test.myproj.dao.impl.SettingsDAOImpl@ed9586}

但键值应为“1”,“2”和“3”,为什么它被替换为“userDAO”,“settingsDAO”和“accountsDAO”,因为当我使用getGeneralDAOMap.get时(“1” “)它返回null。请帮助。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用@Resource而不是@Autowired吗?

Spring docs说了这个,

  

作为此语义差异的特定结果,无法通过@Autowired注入本身定义为集合或映射类型的bean,因为类型匹配不适用于它们。将@Resource用于此类bean,以唯一名称引用特定集合或映射bean。

答案 1 :(得分:0)

你可以试试......

    <util:map id="generalDAOMap" map-class="java.util.HashMap">
            <entry key="1"> 
               <bean class="com.test.myproj.dao.impl.UserDAOImpl" />
            </entry>       
            <entry key="2">
              <bean class="com.test.myproj.dao.impl.AccountsDAOImpl" />
            </entry>       
            <entry key="3">
              <bean class="com.test.myproj.dao.impl.SettingsDAOImpl" /> 
            </entry>       
    </util:map>