【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());
        }
    }
}

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

 View Code

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++

 

本文转自博客园xingoo的博客,原文链接:【Spring实战】—— 7 复杂集合类型的注入,如需转载请自行联系原博主。

时间: 2024-07-31 09:10:01

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

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

主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须相互了解.能够相互协作完成工作.例如,在一个在线购物系统中,订单管理组件需要与产品管理组件以及信用卡认证组件协作:这些组件还需要跟数据库组件协作从而进行数据库读写操作. 在Spring应用中,对象无需自己负责查找或者创建与其关联的其他对象,由容器负责将创建各个对象,并创建各个对象之间的依赖关系.例如

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

  Dao层代码: 1 package com.it.dao; 2 3 public interface SayHell { 4 public void sayHello(); 5 } View Code   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如何知道s

【Spring实战】—— 5 设值注入

本篇主要讲解了Spring的最常用的功能--依赖注入. 注入的方式,是使用Getter Setter注入,平时大多的编程也都是使用这种方法. 举个简单的例子,还是表演者. 表演者有自己的属性,年龄或者表演的歌曲等等.还需要一些复杂的属性,比如乐器,每一种乐器会发出不同的声音. 下面看一下表演者Performer package com.spring.test.action1; public interface Performer { void perform() throws Performan

Spring怎样向enum类型中注入值

问题描述 Spring怎样向enum类型中注入值 public enum Task { GOODS1(1600, 0.025), GOODS2(400, 0.11); private double a; private double b; private Task(double a, double b) { this.a = a; this.b = b; } public double getA() { return a; } public void setA(double a) {this.a

【Spring实战】—— 2 构造注入

本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法. 如果想要使用spring来实现依赖注入,需要几个重要的步骤: 1 定义主要的类和需要分离的属性.这里主要的类,是指程序的主要对象,在例子中是Juggler杂技员.而想要分离构造的属性,是它手中的袋子的数目beanBags. 2 配置bean.xml.通过配置文件,确定主要的类和属性之间的关系,以及实现类. 3 通过应用上下文,获取bean,并进行使用. 注入属性 实例代码: 1 表演

Spring实战6-利用Spring和JDBC访问数据库

主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRepository和SpittleRepository接口,在本地启动该web服务的时候会遇到控制器无法注入对应的bean的错误,因此我决定跳过6~9章,先搞定数据库访问者一章. 在企业级应用开发中不可避免得会涉及到数据持久化层,在数据持久化层的开发过程中,可能遇到很多陷阱.你需要初始化数据库访问框架.

Spring实战3:装配bean的进阶知识

主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expression Language 在装配bean-依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配.基于JavaConfig.基于XML文件.这篇文字将探讨一些Spring中关于bean的管理的高级知识,这些技能你可能不会每天都用,但是非常重要. 3.1 Environments

【Spring实战】—— 16 基于JDBC持久化的事务管理

前面讲解了基于JDBC驱动的Spring的持久化管理,本篇开始则着重介绍下与事务相关的操作. 通过本文你可以了解到: 1 Spring 事务管理的机制 2 基于JDBC持久化的事务管理 Spring的事务管理的机制 Spring本身并不提供事务管理,它只是把事务管理提交给事务管理器,而事务管理器则有多种实现,常见的就是基于JDBC的.Hibernate的.JPA以及JTA的. 操作流程可以参考下面的图片: 其实还有好多种类的事务管理器,这里就不一一列举了. 基于JDBC持久化的事务管理 基于JD

详解Spring 3.0基于Annotation的依赖注入实现

简介:Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的.然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择.Spring 3.0 的出现改变了这一状况,它提供了一系列 的针对依赖注入的注解,这使得 Spring IoC 在 XML 文件之外多了一种可行的选择.本文将详细介绍如 何使用这些注解进行依赖配置的管理. 使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spri