当前位置: 首页 > news >正文

《Spring Framework实战》10:4.1.4.2.详细的依赖和配置

欢迎观看《Spring Framework实战》视频教程

          1. 集合

<list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们:

<bean id="moreComplexObject" class="example.ComplexObject">

<!-- results in a setAdminEmails(java.util.Properties) call -->

<property name="adminEmails">

<props>

<prop key="administrator">administrator@example.org</prop>

<prop key="support">support@example.org</prop>

<prop key="development">development@example.org</prop>

</props>

</property>

<!-- results in a setSomeList(java.util.List) call -->

<property name="someList">

<list>

<value>a list element followed by a reference</value>

<ref bean="myDataSource" />

</list>

</property>

<!-- results in a setSomeMap(java.util.Map) call -->

<property name="someMap">

<map>

<entry key="an entry" value="just some string"/>

<entry key="a ref" value-ref="myDataSource"/>

</map>

</property>

<!-- results in a setSomeSet(java.util.Set) call -->

<property name="someSet">

<set>

<value>just some string</value>

<ref bean="myDataSource" />

</set>

</property>

</bean>

映射键或值的值,或设置值,也可以是以下任何元素:

bean | ref | idref | list | set | map | props | value | null

            1. 集合合并

Spring容器还支持合并集合。应用程序开发人员可以定义父级<list/>、<map/>、<set/>或<props/>元素,并让子级<list/>、<map/>、<set/>或<props/>元素继承和覆盖父级集合中的值。也就是说,子集合的值是父集合和子集合元素合并的结果,子集合元素覆盖父集合中指定的值。

关于合并的这一节讨论了父子bean机制。不熟悉父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">

<!-- the merge is specified on the child collection definition -->

<props merge="true">

<prop key="sales">sales@example.com</prop>

<prop key="support">support@example.co.uk</prop>

</props>

</property>

</bean>

<beans>

请注意,在子bean定义的adminEmails属性的<props/>元素上使用了merge=true属性。当容器解析并实例化子bean时,生成的实例具有一个adminEmails Properties集合,其中包含将子bean的adminEmail集合与父bean的adminEmails集合合并的结果。以下列表显示了结果:

administrator=administrator@example.com

sales=sales@example.com

support=support@example.co.uk

子Properties集合的值集继承了父<props/>的所有属性元素,子支持值的值覆盖了父集合中的值。

这种合并行为同样适用于<list/>、<map/>和<set/>集合类型。在<list/>元素的特定情况下,与list集合类型相关的语义(即有序值集合的概念)得以保持。父级的值位于子级列表的所有值之前。对于Map、Set和Properties集合类型,不存在排序。因此,对于容器内部使用的关联Map、Set和Properties实现类型所基于的集合类型,没有有效的排序语义。

            1. 集合合并的局限性

您不能合并不同的集合类型(如Map和List)。如果您尝试这样做,则会抛出相应的Exception。必须在较低的继承子定义上指定合并属性。在父集合定义上指定合并属性是多余的,不会导致所需的合并。

            1. 强类型集合

由于Java对泛型类型的支持,您可以使用强类型集合。也就是说,可以声明一个Collection类型,使其只能包含(例如)String元素。如果您使用Spring将强类型的Collection依赖注入bean,则可以利用Spring的类型转换支持,以便在将强类型Collection实例的元素添加到Collection之前将其转换为适当的类型。以下Java类和bean定义显示了如何做到这一点:

Java

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>

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

http://www.lryc.cn/news/517895.html

相关文章:

  • 网络安全-XSS跨站脚本攻击(基础篇)
  • Git的学习和常见问题
  • Flink源码解析之:Flink on k8s 客户端提交任务源码分析
  • STLG_02_02_MS SQL - SSMS的安装和使用
  • git 常用命令和本地合并解决冲突
  • ThinkPHP 8高效构建Web应用-获取请求对象
  • 机器人技术:ModbusTCP转CCLINKIE网关应用
  • C语言的语法
  • ElasticsearchJavaClient工具类分析
  • Docker-文章目录
  • docker安装codeserver 运行vite项目(linux)
  • Electron快速入门——跨平台桌面端应用开发框架
  • Delphi+SQL Server实现的(GUI)户籍管理系统
  • 【JavaEE进阶】获取Cookie/Session
  • 在macOS上安装Flutter和环境配置
  • 【电子通识】PWM驱动让有刷直流电机恒流工作
  • Maven在不同操作系统上如何安装?
  • maven如何从外部导包
  • 如何在 Hive SQL 中处理复杂的数据类型?
  • 数据结构:DisjointSet
  • 中国省级产业结构高级化及合理化数据测算(2000-2023年)
  • Nginx不使用域名如何配置证书
  • Perturbed-Attention Guidance(PAG) 笔记
  • 自动驾驶控制与规划——Project 6: A* Route Planning
  • 通俗易懂之线性回归时序预测PyTorch实践
  • [离线数仓] 总结二、Hive数仓分层开发
  • 页面顶部导航栏(Navbar)的功能(Navbar/index.vue)
  • thinnkphp5.1和 thinkphp6以及nginx,apache 解决跨域问题
  • vue2新增删除
  • 测试ip端口-telnet开启与使用