【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();
}
View Code
public class Java implements Language{

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM