Spring高级应用之注入各类集合

简介:

    先定义一个测试类,由于本文将要介绍注入各种集合时如何配置,故这个类包含各种集合,类名和属性名不好取,没有特殊含义:

?
1
2
3
4
5
6
7
8
9
public  class  Test {
     private  List<String> listTest;
     private  Map<String, Object> mapTest;
     private  Set setTest;
     private  String[] arrayTest;
     private  Properties propertiesTest;
     //下面是各个属性的setter,此处省略
     //......
}

    Test类中,分别定义了List,Map,Set,Array等5种集合类型的属性,下面在Spring配置文件中,分别为这些类型的属性注入值:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
< bean  id = "test"  class = "com.abc.Test" >
     <!-- List类型的属性 -->
     < property  name = "listTest" >
         <!-- 为list类型的属性注入值时,使用<list>元素 -->
         < list >
             <!-- 只要类型满足,每个<value>,<ref>,<bean>都可以配置一个list的元素 -->
             < value >ListA</ value >
             < value >ListB</ value >
             < value >ListC</ value >
         </ list >
     </ property >
     
     <!-- Map类型的属性 -->
     < property  name = "mapTest" >
         <!-- 为map类型的属性注入值时,使用<map>元素 -->
         < map >
             <!-- 每一个<entry>都为<map>配置一个K-V对,同样, -->
             < entry  key = "key1"  value = "value1"  />
             <!-- 下面这个value指向了在此Spring文件中定义的另一个叫object的Bean -->
             < entry  key = "key2"  value-ref = "object"  />
         </ map >
     </ property >
     
     <!-- Set类型的属性 -->
     < property  name = "setTest" >
         <!-- 为set类型的属性注入值时,使用<set>元素 -->
         < set >
             <!-- 只要类型满足,每个<value>,<ref>,<bean>都可以配置一个list的元素 -->
             < value >SetA</ value >
             <!-- 下面是一个嵌套Bean的定义。关于什么是嵌套Bean,请看:http://my.oschina.net/itblog/blog/204378 -->
             < bean  class = "com.abc.OtherBean1"  />
             <!-- 下面引用了此Spring文件中定义的另一个Bean -->
             < ref  local = "com.abc.OtherBean2"  />
         </ set >
     </ property >
     
     <!-- Properties类型的属性 -->
     < property  name = "propertiesTest" >
         < props >
             <!-- 每个<prop>元素指定一个属性项,其中key指定属性名 -->
             < prop  key = "prop1" >value1</ prop >
             < prop  key = "prop2" >value2</ prop >
         </ props >
     </ property >
     
     <!-- 数组类型的属性 -->
     < property  name = "arrayTest" >
         <!-- 为数组类型的属性注入值时,使用<list>元素 -->
         < list >
             <!-- 只要类型满足,每个<value>,<ref>,<bean>都可以配置一个list的元素 -->
             < value >Array1</ value >
             < bean  class = "com.abc.OtherBean1"  />
             < ref  local = "com.abc.OtherBean2"  />
         </ list >
     </ property >
</ bean >

    由于集合元素有可以是基本类型值、引用容器中其他Bean、嵌套Bean或集合属性等,因此<list>、<set>、和<key>元素又可以接受如下的子元素:

  • value:指定集合元素是基本数据类型值或字符串类型值

  • ref:指定集合元素是容器中另一个Bean实例

  • bean:指定集合元素是一个嵌套Bean

  • list、set、map及props:指定集合元素值又是集合

    <props>元素适用于配置Properties类型的属性,Properties类型时一种特殊的类型,其key和value都只能是字符串,故Spring配置Properties类型的属性都比较简单:每个属性项只要分别给出属性名和属性值就足够了。

    当使用<map>元素配置Map类型属性时稍显复杂,因为Map类型的元素由多个<entry>组成,每个<entry>又需要配置key和value两个属性。其中<entry>属性支持以下几个属性:

  • key:当key是基本类型或字符串时使用

  • key-ref:当key类型是容器中定义的另一个Bean时使用

  • value:当value是基本类型或字符串时使用

  • value-ref:当value是容器中定义的另一个Bean时使用

    Spring还提供了一个简化语法来支持Properties形参的setter方法,例如我们可以使用如下配置片段来配置Properties类型的属性:

?
1
2
3
4
5
6
< property  name = "propertiesTest" >
     < value >
         key1=value1
         key2=value2
     </ value >
</ property >

    虽然这种配置方式更简单,但是它也有一个缺点:属性名、属性值都只能是英文或数字,不能包含中文字符

    从Spring2开始,Spring IoC容器支持集合的合并:子Bean中的集合属性可以从其父Bean的集合属性继承而来,同时,子Bean中的属性会覆盖父Bean中属性名相同的值。也就是说,子Bean的集合属性的最终值是父Bean、子Bean合并后的最终结果,下面是一个示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 将parent类型定义成抽象类 -->
< bean  id = "parent"  abstract = "true"  class = "com.abc.Parent" >
     <!-- 定义Properties类型的集合属性 -->
     < property  name = "websites" >
         < props >
             < prop  key = "baidu" >www.baidu.com</ props >
             < prop  key = "google" >www.google.com.hk</ prop >
         < props >
     </ property >
</ bean >
< bean  id = "child"  parent = "parent" >
     < property  name = "websites" >
         <!-- 注意,这里子Bean在集合元素上加了属性"merge=true" -->
         < props  merge = "true" >
             < prop  key = "google" >www.google.com</ prop >
             < prop  key = "tencent" >www.qq.com</ prop >
         < props >
     </ property >    
</ bean >

    通过上面的配置后,child中的属性将变为:

?
1
2
3
baidu=www.baidu.com
google=www.google.com
tencent=www.qq.com

    


目录
相关文章
|
2月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
328 0
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
678 3
|
9月前
|
人工智能 Java API
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
2314 107
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
123 8
|
3月前
|
Java 应用服务中间件 开发者
Spring Boot 技术详解与应用实践
本文档旨在全面介绍 Spring Boot 这一广泛应用于现代企业级应用开发的框架。内容将涵盖 Spring Boot 的核心概念、核心特性、项目自动生成与结构解析、基础功能实现(如 RESTful API、数据访问)、配置管理以及最终的构建与部署。通过本文档,读者将能够理解 Spring Boot 如何简化 Spring 应用的初始搭建和开发过程,并掌握其基本使用方法。
336 2
|
3月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
3月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
981 10
|
4月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
559 2
|
4月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
4月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
523 13

热门文章

最新文章