Spring 5.3.9集合注入的实现类选择及相关问题咨询
Spring Framework 5.3.9集合注入相关问题解答
示例代码
Bean类代码
// bean class private Map<String,String> myMap; public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; }
XML配置代码
<!-- bean def xml --> <bean id="student" class="com.my.bean.Student"> <property name="myMap"> <map> <entry key="name" value="someName"/> <entry key="school" value="someSchool"/> </map> </property> </bean>
问题解答
Spring会选择HashMap作为注入的实现类吗?还是其他实现类?
Spring 5.3.9中,通过XML<map>标签注入的Map默认实现类是LinkedHashMap,而非HashMap。这是因为Spring会保留<entry>标签的插入顺序,而LinkedHashMap天然支持顺序维护。Spring是否允许自定义选择集合实现类?
允许,有两种常见方式:
- 在XML配置中直接指定集合实现类:给
<map>标签添加class属性,例如:
也可以指定自定义的Map实现类(只要符合Map接口规范)。<map class="java.util.HashMap"> <entry key="name" value="someName"/> </map> - 通过@Bean方法返回指定集合:在配置类中定义返回目标集合实现类的@Bean方法,然后注入到目标Bean中。
- 若默认实现类随版本变更,在哪里可以找到相关文档?
- Spring官方文档的「Core Technologies」章节下的「Bean Definition」部分,集合注入的小节会说明默认实现类;
- Spring对应版本的Release Notes(版本发布说明),如果默认实现类有变更,会在其中标注;
- 查看Spring源码中处理集合解析的类,比如
org.springframework.beans.factory.support.BeanDefinitionValueResolver或org.springframework.beans.factory.support.DefaultListableBeanFactory中创建集合的相关方法(如createMap)。
已尝试操作
- 查阅Spring Framework 5.x文档,未找到集合实现类相关内容;
- 尝试阅读Spring Framework 5.x源码
org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveMultipleBeans,仍未找到实现类; - 自身Java能力有限;
- 谷歌搜索相关内容但未找到有效结果。
内容的提问来源于stack exchange,提问作者runzhi xiao
相关产品推荐
相关产品推荐

