之前讲解了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++