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

    


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞

最近两天被朋友圈的“Apache Log4j2 远程代码执行漏洞”刷屏了&#xff0c;主要是因为组件存在 Java JNDI 注入漏洞&#xff1a;当程序将用户输入的数据记入日志时&#xff0c;攻击者通过构造特殊请求&#xff0c;来触发 Apache Log4j2 中的远程代码执行漏洞&#xff0c;从而利…

matlab总最近邻法则,MATLAB中最近邻插值算法

一段时间后&#xff0c;我在MATLAB Image Processing Toolbox中通过了imresize功能的代码&#xff0c;为图像的最近邻插值创建了一个简化版本。以下是如何应用于您的问题&#xff1a;%# Initializations:scale [2 2]; %# The resolution scale factors: [rows columns]oldSize…

史上最牛的文科生:法学出身,却发明出十进制计算器,折磨无数人的微积分符号,跨界40多个领域惊艳学术圈

全世界只有3.14 % 的人关注了爆炸吧知识“世界上没有完全相同的两片树叶。”想必大家对这句话耳熟能详&#xff0c;但却不知道这名言背后的作者是谁吧&#xff1f;其实&#xff0c;他就是与牛顿争论微积分优先权大战中的大佬&#xff1a;莱布尼茨。博览群书 天赋异禀1646年&…

如何解决secureCRT里面的The remote system refused the connection.

不废话,先爆照 Ubuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可。然后确认sshserver是否启动了: ps -e |grep ssh 如果只有ssh-agent那ss

为operamasks增加HTML扩展方式的组件调用

#为operamasks增加HTML扩展方式的组件调用##背景 之前的[博文](http://www.cnblogs.com/p2227/p/3540858.html)中有提及到&#xff0c;发现easyui中的combobox,datebox,layout都有效率问题&#xff0c;其中layout的问题在[这里](http://www.cnblogs.com/p2227/p/3541162.html)有…

python 带pydev的eclipse无法导入win32api包(或无法导入其他包)

需要重新配置pydev中的python解释器&#xff0c;因为它不会自动更新。 将原先的python.exe先remove掉&#xff0c;再重新new回来&#xff0c;new回来的时候会让你勾选system libs&#xff0c;把你想要更新的勾选上去就可以了。转载于:https://blog.51cto.com/xuewei/1111889

OC之非ARC环境下循环retain问题

观察上述情况&#xff0c;上述就是著名的循环引用问题&#xff0c;对于此类问题&#xff0c;“你包含我&#xff0c;我包含你”&#xff0c;里面相关的对象占用的内存永远回收不了&#xff0c;解决办法很简单&#xff0c;与常规方法不同。正常情况下&#xff0c;我们应在Person…

我的开源故事

| 作者&#xff1a;李扬| 编辑&#xff1a;钱奕| 设计&#xff1a;杨敏| 责编&#xff1a;钱英宇一、前 言我相信我与开源故事的开始并不是第一次用GitHub或者CSDN&#xff0c;而是突如其来的新冠疫情。2020年1月25日&#xff0c;大年初一&#xff0c;范晶晶的一条关于wuhan202…

matlab 类 使用,matlab中sortrows的用法

sortrows有三种用法&#xff1a;B sortrows(A)B sortrows(A,column)[B,index] sortrows(A,...)我们先创建一个矩阵Afloor(gallery(uniformdata,[6 7],0)*100);A(1:4,1)95; A(5:6,1)76; A(2:4,2)7; A(3,3)73A 95 45 92 41 13 1 8495 7 73 89 20 74 5295 7 73 5 19 44 2095 7 …

Spring+EhCache缓存实例(详细讲解+源码下载)

转载注明出处http://blog.csdn.net/u013142781 一、ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。…

大型打脸现场!被藐视的少女摇身一变成为“抽象代数之母”,哲学教授只能跪地喊爸爸...

全世界只有3.14 % 的人关注了爆炸吧知识今天小天要为大家介绍一位数学界的女神。在爱因斯坦、帕维尔亚历山德罗夫等人的眼中&#xff0c;她是数学史上最重要的女人&#xff0c;甚至被爱因斯坦称为数学界的雅典娜。她&#xff0c;就是诺特定理的提出者——艾米诺特。艾米诺特上学…

组策略应用之一:映射网络驱动器

在部署文件服务器时&#xff0c;我们经常会用映射网络驱动器的方法访问共享文件&#xff0c;但如果有新员工离职、调岗或更换电脑后&#xff0c;就不得不重新映射网络驱动器&#xff0c;在一定程度上即增加了系统管理员的工作负担&#xff0c;另外在一定程度上也会影响员工的工…

白话面向对象

关于面向对象的学习&#xff0c;将是一个长期的过程&#xff0c;每一个阶段都会有不同的看法&#xff0c;现在对面向对象中的各种术语有有了一点新的认识&#xff0c;我以白话的形式描述出来。 1.类和对象 一个对象就是一个实体&#xff0c;你是一个对象&#xff0c;我是一个对…

Shell常用命令总结

1、 ls: 类似于dos下的dir命令 ls最常用的参数有三个&#xff1a; -a -l -F。 ls –a Linux上的文件以.开头的文件被系统视为隐藏文件&#xff0c;仅用ls命令是看不到他们的&#xff0c;而用ls -a除了显示一般文件名外&#xff0c;连隐藏文件也会显示出来。 ls –l 该参…

Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示...

Android JSON原生解析的几种思路&#xff0c;以号码归属地&#xff0c;笑话大全&#xff0c;天气预报为例演示 今天项目中要实现一个天气的预览&#xff0c;加载的信息很多&#xff0c;字段也很多&#xff0c;所以理清了一下思路&#xff0c;准备独立出来写一个总结&#xff0c…

C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①

使用名称TransformerNameTransformer是在Caliburn.Micro v1.1中引入的&#xff0c;它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色的一个组成部分。虽然您可以覆盖这些服务上的各种函数来替换底层行为&#xff0c;但您的大多数需求都应该通过使用适当的NameTran…

史上最可怜的科学家:出生先天不足,家道中落吃不上饭,追个星丢工作,拜师被冤枉,写书又被烧,最后还被拖工资活活拖死了......

全世界只有3.14 % 的人关注了爆炸吧知识今天&#xff0c;小天来向各位模友介绍一个痴迷偶像正面刚的小迷弟吧。多病的贫家子&#xff0c;鲁莽的小迷弟1571年&#xff0c;开普勒在德国维尔镇呱呱落地了。作为一个善解人意的宝宝&#xff08;胚胎&#xff09;&#xff0c;开普勒没…

[zz]为 Lua 绑定 C/C++ 对象

转载自&#xff1a; http://blog.codingnow.com/2013/01/binding_c_object_for_lua.html 如何绑定 C/C 对象到 Lua 里&#xff1f;通常是创建一个 userdata &#xff0c;存放 C/C 对象指针&#xff0c;然后给 userdata 添加元表&#xff0c;用 index 元方法映射 C/C 中的对象方…

文本字符集转换

http://lqqnotes.blog.51cto.com/3329069/659886 拉取数据 在我opensuse下OK 产品的WIN下面乱码 # enca -L 现在文件的语言 -x 需要转换编码 需要转换编码的文件 查看文件编码jinlinux-gzy1:~> enca -d Downloads/store_sdb_ectools_regions_0211-3.csvDownloads/store_sdb…

php 身份认证服务,PHP的HTTP身份认证

PHP 的 HTTP 认证机制仅在 PHP 以 Apache 模块方式运行时才有效&#xff0c;因此该功能不适用于 CGI 版本。在 Apache 模块的 PHP 脚本中&#xff0c;可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息&#xff0c;使其弹出一个用户名/密码输入窗口。当…