4-2-4-1-Collections合并

Collections合并

Spring容器还支持合并集合。 应用程序开发人员可以定义父,,或元素,并具有子,,或元素。 从父集合继承和覆盖值。 也就是说,子集合的值是合并父集合和子集合的元素的结果,子集合的元素会覆盖父集合中指定的值。

关于合并的本节讨论了父子bean机制。 不熟悉父级和子级bean定义的读者可能希望先阅读相关部分,然后再继续。

以下示例演示了集合合并:

<beans>
    <bean id="parent" abstract="true" class="example.ComplexObject">
        <property name="adminEmails">
            <props>
                <prop key="administrator">administrator@example.com</prop>
                <prop key="support">support@example.com</prop>
            </props>
        </property>
    </bean>
    <bean id="child" parent="parent">
        <property name="adminEmails">
            <!-- 合并是在子集合定义上指定的 -->
            <props merge="true">
                <prop key="sales">sales@example.com</prop>
                <prop key="support">support@example.co.uk</prop>
            </props>
        </property>
    </bean>
<beans>

注意,在子bean定义的adminEmails属性的**元素上使用了merge = true**属性。 当子bean由容器解析并实例化后,生成的实例将具有adminEmails属性集合,其中包含将子项的adminEmails集合与父项的adminEmails集合合并的结果。 以下清单显示了结果:

administrator=administrator@example.com
sales=sales@example.com
support=support@example.co.uk

子“属性”集合的值集继承了父****的所有属性元素,并且子项的支持值覆盖了父集合中的值。

这种合并行为类似地适用于,和集合类型。 在元素的特定情况下,将维护与List集合类型关联的语义(即,值的有序集合的概念)。 父级的值先于子级列表的所有值。 对于 Map, Set, Properties集合类型,不存在任何排序。 因此,对于容器内部使用的关联Map,Set和Properties实现类型基础的集合类型,没有任何排序语义有效。

Collections合并的局限性

您不能合并不同的集合类型(例如map和list)。如果您确实尝试这样做,则会抛出适当的Exception。 必须在下面的继承的子定义中指定merge属性。 在父集合定义上指定merge属性是多余的,不会导致所需的合并。

强类型集合

随着Java 5中泛型类型的引入,您可以使用强类型集合。 也就是说,可以声明一个Collection类型,使其只能包含(例如)String元素。 如果使用Spring将强类型的Collection依赖注入到Bean中,则可以利用Spring的类型转换支持,以便在将强类型的Collection实例的元素添加到Bean中之前,先将其转换为适当的类型集合。以下Java类和bean定义显示了如何执行此操作:

public class SomeClass {

    private Map<String, Float> accounts;

    public void setAccounts(Map<String, Float> accounts) {
        this.accounts = accounts;
    }
}
<beans>
    <bean id="something" class="x.y.SomeClass">
        <property name="accounts">
            <map>
                <entry key="one" value="9.99"/>
                <entry key="two" value="2.75"/>
                <entry key="six" value="3.99"/>
            </map>
        </property>
    </bean>
</beans>

当准备注入某物bean的accounts属性时,可以通过反射获得有关强类型Map <String,Float>的元素类型的泛型信息。 因此,Spring的类型转换基础结构将各种值元素识别为Float类型,并将字符串值(9.99、2.75和3.99)转换为实际的Float类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值