专栏首页xingoo, 一个梦想做发明家的程序员【Spring实战】—— 7 复杂集合类型的注入

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Effective Java》—— 创建与销毁对象

    本篇主要总结的是《Effecticve Java》中关于创建和销毁对象的内容。 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 ...

    用户1154259
  • 《Spark MLlib 机器学习实战》1——读后总结

    1 概念 ? 2 安装 3 RDD RDD包含两种基本的类型:Transformation和Action。RDD的执行是延迟执行,只有Action算子才会触发任...

    用户1154259
  • Java程序员的日常 —— 注册工厂的妙用

    注册工厂是一种很常用的框架书写方法,它适合于快速创建相同类型的对象。 举个栗子 比如一个家具工厂,有沙发、椅子、茶几等等,正常的编程模式是这样的: //创...

    用户1154259
  • 如何在Mac OS上使用UiAutomator快速调试类

    本人最近在Mac OS上使用UiAutomator快速调试类的时候发现跟Windows环境下使用有很大的区别,对于我这个Mac OS小白来说有很多坑要填,今天终...

    FunTester
  • 漫画:设计模式之 “外观模式”

    于是肯德基对这些菜品做了一定的组合,推出了各种各样的套餐。比如A套餐,包括汉堡/薯条/可乐;B套餐,包括汉堡/鸡翅/沙拉/可乐:

    小灰
  • java解析json方法总结

    工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookies, ...

    砸漏
  • 所谓一万小时定律并没有卵用

    关于一万小时定律,我想已经不用再解释了,大概就是不管你做什么事情,只要坚持一万小时,基本上都可以成为该领域的专家。为什么说没卵用呢?

    姬小光
  • 回调在事件中的妙用 ### 回调: 回头调用,函数 A 的事先干完,回头再调用函数 B。事件中的使用。通过以上方式,可以中其本模块中调用其它模块变量,有些细节与严格意义上回调不一致,但基本思想一致

    函数 A 的参数为函数 B, 函数 B 被称为回调函数。至于为何要用参数的形式传入,而不是直接在 A 中直接调用 B 函数,主要是为了变量的灵活性考虑。 为何...

    用户2434869
  • Spring5.0源码深度解析之理解Configuration注解

    思考一个问题 为什么启动SpringBoot项目的时候需要加上Configuration、@ComponentScan

    须臾之余
  • MD5 加密需要注意编码格式!!!

    相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码、浏览器的字符编码等和对方不一致,所...

    斯文的程序

扫码关注云+社区

领取腾讯云代金券