【Spring实战】—— 7 复杂集合类型的注入

之前讲解了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++
时间: 2024-10-21 11:10:00

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

Spring.Net学习笔记七(集合类型的注入)

Spring.NET还支持集合类型的注入.而且使用起来也比较方便. 一.ILIst类型 使用<list>元素作为ILIst的标签,value为集合中元素的值.也可以注入对象,甚至关联其它对象,使用 <ref/>元素表示关联的对象,object 属性为所关联对象的id或name.集合可以为空,用<null/>元素来标记. 在<list>元素中设置 element-type 属性表示泛型T的类型,例如 element-type="int"  

Spring如何装配各种集合类型的属性

在前面我们已经会注入基本类型对象和其他bean,现在我们就来学习如何注入各种集合类型. Spring如何装配各种集合类型的属性 首先新建一个普通的Java Project,名称为spring_collection,并迅速搭建好Spring的开发环境. 接着在src目录下新建一个cn.itcast.service包,并在该包下创建PersonService接口,其代码为: public interface PersonService { Set<String> getSets(); List&l

Spring中集合类型属性注入

我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. 1.创建一个类:员工类Employee package cn.entity; /** * 员工类 * * @author hyj * */ public class Employee { //员工年龄 private Integer age; //员工姓名 private String name;

Spring框架xml配置文件 复杂类型属性注入——数组 list map properties

Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; public class Person { //普通字符串 private String name; //字符串数组 private String[] arr; //字符串列表 private List<Stri

Spring笔记(二):Ioc 之注入与装配

一.Spring依赖注入的原理 二.依赖注入的实现 (一)对象的注入 1.简单属性注入 1)源代码 package main.java.com.spring.ioc.base.dao.impl; import main.java.com.spring.ioc.base.dao.PersonDao; /** * * PersonDiDaoImpl * @title * @desc * @author SAM-SHO * @Dec 28, 2014 */ public class PersonDiD

Spring:(二)DI依赖注入方式

DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的方式 构造方法的方式 set方法的方式 工厂方法注入 主要学习前两种方式 构造方法的方式 当是构造方法时注入Bean的属性值(简单值,集合,对象) 利用<constructor-arg>标签进行属性的注入 name:被设置属性的名 value:被设置属性的值 编写用构造方法的pojo 1 pack

Spring 注入集合类型

定义了一个类: Java代码   @Service public class StringTest implements CachedRowSet,SortedSet<String>,Cloneable Java代码   @Controller public class HomeController { @Autowired CachedRowSet message; @Autowired CachedRowSet message1; } 这里CachedRowSet , 等其他接口都是可以注

[Spring实战系列](9)装配集合

前两篇文章中,我们已经了解了如何使用Spring 配置简单属性值(使用value 属性)和引用其他Bean 的属性(使用ref 属性).但是value 和ref 仅在Bean 的属性值是单个值的情况下才有用.当Bean 的属性值是集合,Spring 该如何配置呢? 当配置集合类型的Bean属性时,Spring 提供了4 种类型的集合配置元素. 集合元素 用途 <list> 装配list类型的值,允许重复. <set> 装配set类型的值,不允许重复. <map> 装配m

【spring set注入 注入集合】 使用set注入的方式注入List集合和Map集合/将一个bean注入另一个Bean

Dao层代码: 1 package com.it.dao; 2 3 public interface SayHell { 4 public void sayHello(); 5 } Dao的Impl实现层: 1 package com.it.dao.impl; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import com.it.dao.SayHell; 7 8 /** 9 * Spring如何知道setter方法?如何将值注入