7.5.8:注入集合值

如果Bean的属性是个集合,则可以使用集合元素<list.../> 、<set.../> 、<map.../><props.../>元素分别用来设置类型为List、Set、Map和Properties的集合属性值。

Axe.java :

public interface Axe {
	
	public String chop();
}
StoneAxe.java :

public class StoneAxe implements Axe {

	@Override
	public String chop() {
		
		return "石斧砍柴好慢";
	}

	@Override
	public String toString() {
		
		return "石斧";
	}
	
}
SteelAxe.java :

public class SteelAxe implements Axe {

	@Override
	public String chop() {
		
		return "钢斧砍柴好快";
	}

	@Override
	public String toString() {
		
		return "钢斧";
	}
	
}
Chinese.java :

public class Chinese {
	private List<String> schools;
	private Map scores;
	private Map<String,Axe> phaseAxes;
	private Properties health;
	private Set axes;
	private String[] books;
	public Chinese() {
		
	}
	public void setSchools(List<String> schools) {
		this.schools = schools;
	}
	public void setScores(Map scores) {
		this.scores = scores;
	}
	public void setPhaseAxes(Map<String, Axe> phaseAxes) {
		this.phaseAxes = phaseAxes;
	}
	public void setHealth(Properties health) {
		this.health = health;
	}
	public void setAxes(Set axes) {
		this.axes = axes;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void test(){
		System.out.println(schools);
		System.out.println(scores);
		System.out.println(phaseAxes);
		System.out.println(health);
		System.out.println(axes);
		System.out.println(Arrays.toString(books));
	}
}
bean.xml核心配置:

<bean id="chinese" class="com.bean.Chinese">
    
        <property name="schools">
            <list>
                <value>小学</value>
                <value>中学</value>
                <value>大学</value>
            </list>
        </property>
        
        <property name="scores">
            <map>
                <entry key="数学" value="87"/>
                <entry key="英语" value="89"/>
                <entry key="语文" value="82"/>
            </map>
        </property>
        
        <property name="phaseAxes">
            <map>
                <entry key="原始社会" value-ref="stoneAxe"/>
                <entry key="农业社会" value-ref="steelAxe"/>
            </map>
        </property>
        
        <property name="health">
            <props>
                <prop key="血压">正常</prop>
                <prop key="身高">175</prop>
            </props>
        </property>
        
        <property name="axes">
            <set>
                <!-- 每个value,bean,ref都配置一个set元素 -->
                <value>普通的字符串</value>
                <bean class="com.bean.SteelAxe"/>
                <ref local="stoneAxe"/>
            </set>
        </property>
        
        <property name="books">
            <list>
                <value>疯狂Java讲义</value>
                <value>JavaWeb与Tomcat开发技术详解</value>
                <value>轻量级JavaEE企业应用实战</value>
            </list>
        </property>
        
    </bean>
    
    <bean id="stoneAxe" class="com.bean.StoneAxe"/>
    <bean id="steelAxe" class="com.bean.SteelAxe"/>
Test.java :

public class Test {

	public static void main(String[] args) {

		ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
		Chinese chinese=(Chinese) ctx.getBean("chinese");
		chinese.test();
	}

}

由于集合元素又可以是基本类型值、引用容器中其他Bean、嵌套Bean或集合属性等,所以<list.../> 、<key.../> 和<set.../>元素又可接受如下子元素

① value:集合元素是基本类型或字符串类型。

② ref:集合元素是容器中另一个Bean实例。

③ bean:集合元素是一个嵌套Bean。

④ list、set、map及props:集合元素又是集合。

<props.../>元素用于配置Properties类型的属性,Properties类型是一种特殊的类型,其key和value都只能是字符串。

使用<map.../>元素配置Map属性时比较复杂,因为Map集合的每个元素由key、value两个部分组成,所以配置文件中每个<entry.../>配置一个Map元素,其中entry支持如下4个属性:

① key:Map的key是基本类型或字符串。

② key-ref:Map的key是容器中另一个Bean实例。

③ value:Map的value是基本类型或字符串。

④ value-ref:Map的value是容器中另一个Bean实例。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值