之前讲解了Spring的基本类型和bean引用的注入,接下来学习一下复杂集合类型的注入,例如:List、Set、Map等。

  对于程序员来说,掌握多种语言是基本的技能。

  我们这里做了一个小例子,程序员们是一个Bean实例,而掌握的编程语言则是放入一个集合类型中进行注入。

  简单的来说:

  List是一种按照序号标识的集合,

  Set与List相似但是元素不允许重复,

  Map则是一种自定的键值对,键值都可以是任意的类型。

  Bean的实现类

public class Programmer {
public Programmer(){}
//List 与 Set的注入
private Collection<Language> language;
public void setLanguage(Collection<Language> language){
this.language = language;
}
public void working(){
for(Language lang : language){
System.out.println("working on "+lang.using());
}
}
//Map的注入
private Map<String,Language> lang;
public void setLang(Map<String,Language> lang){
this.lang = lang;
}
public void studying(){
for(String key : lang.keySet()){
System.out.print(key+" : ");
Language language = lang.get(key);
System.out.println("studying on "+language.using());
}
}
}

  其他需要的一些接口和实现类

public interface Language {
public String using();
}
public class Java implements Language{

    public String using() {
return "Java";
} }
public class Cpp implements Language{
public String using() {
return "C++";
}
}

  Spring的配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="java" class="com.spring.test.collector.Java"/>
<bean id="cpp" class="com.spring.test.collector.Cpp"/>
<bean id="xingoo" class="com.spring.test.collector.Programmer">
<property name="language">
<list>
<ref bean="java"/>
<ref bean="cpp"/>
</list>
</property>
</bean>
<bean id="halo" class="com.spring.test.collector.Programmer">
<property name="language">
<set>
<ref bean="java"/>
</set>
</property>
</bean>
<bean id="zhang3" class="com.spring.test.collector.Programmer">
<property name="lang">
<map>
<!-- key键为String key-ref键为其他bean的引用 -->
<!-- value值为String value-ref值为其他bean的引用 -->
<entry key="java" value-ref="java"/>
<entry key="cpp" value-ref="cpp"/>
</map>
</property>
</bean>
</beans>

  获取Bean实例并使用

public class test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
System.out.println("[xingoo]");
Programmer programmer = (Programmer)ctx.getBean("xingoo");
programmer.working();
System.out.println("[halo]");
Programmer programmer1 = (Programmer)ctx.getBean("halo");
programmer1.working();
System.out.println("[zhang3]");
Programmer programmer2 = (Programmer)ctx.getBean("zhang3");
programmer2.studying();
}
}

  执行结果:

[xingoo]
working on Java
working on C++
[halo]
working on Java
[zhang3]
java : studying on Java
cpp : studying on C++

【Spring实战】—— 7 复杂集合类型的注入的更多相关文章

  1. Spring 依赖注入(DI) 的三种方式 和 对集合类型的注入

    // 分别省略了getter setter public class Student { private String name; private int age; private Teacher t ...

  2. (转)Spring如何装配各种集合类型的属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52858499 在前面我们已经会注入基本类型对象和其他bean,现在我们就来学习如何注入各种集合 ...

  3. Spring中集合类型属性注入

    我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...

  4. 05Spring_Bean属性的集合类型的注入

  5. Redis从基础命令到实战之有序集合类型(SortedSet)

    有序集合类型是Redis五种数据类型中最高级的.也是最复杂的类型.有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一 ...

  6. Spring.NET学习笔记8——集合类型的注入(基础篇)

    1.基础类 public class Happy    {        public override string ToString()        {            return &q ...

  7. Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)

    Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import ...

  8. Spring实战2:装配bean—依赖注入的本质

    主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...

  9. 《Web安全攻防渗透测试实战指南》 各类型 SQL注入 实验过程整理

    Union注入 https://www.jianshu.com/p/8a11bf55aaee Boolean注入 https://www.jianshu.com/p/e4086f59812d 报错注入 ...

随机推荐

  1. BZOJ - 3489 KD树 范围计数 空间思维转换

    题意:给定数列\(a[1...n]\),\(Q\)次查询\([L,R]\)中只出现一次的最大值 这道题的做法比较劲.. 对每个元素构造三维空间的点\((i,pre[i],next[i])\),查询\( ...

  2. 天梯赛easy题

    2 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> ...

  3. maria(mysql)的主从复制

    一.mariadb的基本操作 1.远程连接 mysql -uroot -p -h 127.0.0.1 mysql -uroot -p -h 192.168.226.128 2.赋予远程连接的权限 gr ...

  4. flask之--钩子,异常,上下文,flask-script,模板,过滤器,csrf_token

    一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: - 在请求开始时,建立数据库连接: - 在请求开始时,根据需求进行权限校验: - 在请求结束时,指定数据的交互格式: ...

  5. windos下安装mongodb

    一.下载 1. www.mongodb.com/download-center#community2.根据电脑系统下载对应的版本,3.选择zip(解压版本)/msi安装版本4.本文是用的msi(安装版 ...

  6. poj3669

    一.题意:流星雨来袭击我们的女主,Bessie.为了找一个安全地方,她开始逃了.地图相当于平面坐标系第一象限,Bessie一开始在原点.然后,每颗流星都会在某个时刻砸下来,砸到的地方连同上下左右都会被 ...

  7. 转 How To Stop A Running Job Using DBMS_JOB

    There is no procedure within the dbms_job package to stop a running job.You will need to determine w ...

  8. 文献综述四:基于 UML 技术的客户关系管理系统实现

    一.基本信息 标题:基于 UML 技术的客户关系管理系统实现 时间:2015 出版源:电子设计工程 文件分类:uml技术的研究 二.研究背景 使用UML 建模技术和 B/S 架构访问模式,设计出可应用 ...

  9. mysql 显示树结构表的节点全路径

    SELECT TYPEID AS TYPEID, pTYPEID AS 父TYPEID, levels AS 父到子之间级数, concat(paths, ',', TYPEID) AS 父到子路径, ...

  10. 使用SVN进行源码管理

    阅读目录: 1.SVN服务端配置 1.1 创建版本库 1.2 创建用户 1.3 设置用户权限 2.SVN客户端使用 2.1 向SVN服务器中导入源码 2.1.1 直接通过TortoiseSVN向SVN ...