这是我在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。请帮助。
答案 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>