(五)集合注入

在任何开发中一定会存在集合的操作,在Spring里面也支持集合数据的注入:数组,list,map,properties.

范例:注入数组数据

package cn.zwb.vo;

import java.util.Arrays;

public class Company {
	private String msg[];
	private Integer data[];
	public Integer[] getData() {
		return data;
	}
	public void setData(Integer data[]) {
		this.data = data;
	}
	public String[] getMsg() {
		return msg;
	}
	public void setMsg(String msg[]) {
		this.msg = msg;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "msg="+Arrays.toString(this.msg)+"data="+Arrays.toString(this.data);
		
	}
}
	<bean id="company" class="cn.zwb.vo.Company">
		<property name="data">
			<array value-type="java.lang.Integer">
				<value>10</value>
				<value>10</value>
				<value>10</value>
			</array>
		</property>
		<property name="msg">
		<array value-type="java.lang.String">
				<value>詹</value>
				<value>闻</value>
				<value>博</value>
			</array>
		</property>
	</bean>

    在本类中可以接收两个数组的对象信息.现在可以发现,在使用数组数据的时候都设置了相应的数据类型,如果不写操作的数据类型,那么Spring会自动的判断给出的数据类型,帮助用户自动转型.

        但是需要清楚的是,数组一般不会再开发之中出现,如果真的出现数组了,使用List集合来横向代替数组.

范例:使用List集合操作

package cn.zwb.vo;

import java.util.List;

public class Company {
	private List<String> msg;
	public List<String> getMsg() {
		return msg;
	}
	public void setMsg(List<String> msg) {
		this.msg = msg;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "msg="+this.msg;	
	}
}
<bean id="company" class="cn.zwb.vo.Company">
		<property name="msg">
		<array value-type="java.lang.String">
				<value>詹</value>
				<value>闻</value>
				<value>博</value>
			</array>
		</property>
	</bean>
        也就是说可以得出这样一种结论:List=数据,

范例:观察Set集合注入

<bean id="company" class="cn.zwb.vo.Company">
		<property name="msg">
		<set value-type="java.lang.String">
				<value>詹</value>
				<value>闻</value>
				<value>博</value>
				<value>博</value>
			</set>
		</property>
	</bean>
package cn.zwb.vo;

import java.util.Set;

public class Company {
	private Set<String> msg;
	public Set<String> getMsg() {
		return msg;
	}
	public void setMsg(Set<String> msg) {
		this.msg = msg;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "msg="+this.msg;	
	}
}

        此时不再出现重复数据,因为set集合是不允许出现重复的.

范例:注入map集合;

package cn.zwb.vo;

import java.util.Map;

public class Company {
	private Map<Integer,String> msg;
	public Map<Integer,String> getMsg() {
		return msg;
	}
	public void setMsg(Map<Integer,String> msg) {
		this.msg = msg;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "msg="+this.msg;	
	}
}
<bean id="company" class="cn.zwb.vo.Company">
		<property name="msg">
		<map key-type="java.lang.Integer" value-type="java.lang.String">
				<entry key="1" value="zhan"></entry>
				<entry key="2" value="wen"></entry>
			</map>
		</property>
	</bean>

        以上的操作实际上在开发配置文件的编写过程之中见到的不多,而真正见到最多的是Properties类型.

范例:注入Properties

<bean id="company" class="cn.zwb.vo.Company">
		<property name="msg">
		<props>
		<prop key="zhan">詹</prop>
		<prop key="wen">闻</prop>
		<prop key="bo">博</prop>
		</props>
		</property>
	</bean>

package cn.zwb.vo;
import java.util.Properties;
public class Company {
	private Properties msg;
	public Properties getMsg() {
		return msg;
	}
	public void setMsg(Properties msg) {
		this.msg = msg;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "msg="+this.msg;	
	}
}

在一些框架的集合开发之中,此类属性的设置是最为常见的.

    现在所给出的实际上只是定义的一些数值,而最神奇的是它可以定义文件内部的引用关系

范例:观察如下的结构

package cn.zwb.vo;


import java.util.List;


public class Dept {
	private Integer deptno;
	private String dname;
	private List<Emp> emps;
	public Dept(){}
	public Integer getDeptno() {
		return deptno;
	}
	public void setDeptno(Integer deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "部门编号:"
				+ this.deptno
				+ ",名称"
				+this.dname
				+",雇员:"
				+ this.emps;
	}
	public List<Emp> getEmps() {
		return emps;
	}


	public void setEmps(List<Emp> emps) {
		this.emps = emps;
	}
}

        而后的关键就在于通过配置文件清楚的描述出以上的结构关系.

<bean id="dept" class="cn.zwb.vo.Dept">
	<property name="deptno" value="10"></property>
	<property name="dname" value="开发部"></property>
	<property name="emps">
	<list>
	<ref bean="empA"/>
	<ref bean="empB"/>
	<ref bean="empC"/>
	</list>
	</property>
	</bean>
	<bean id="empA" class="cn.zwb.vo.Emp">
		<property name="empno" value="7369"></property>
		<property name="ename" value="zwb"></property>
		<property name="dept" ref="dept"></property>
	</bean>
	<bean id="empB" class="cn.zwb.vo.Emp">
		<property name="empno" value="7369"></property>
		<property name="ename" value="zwb"></property>
		<property name="dept" ref="dept"></property>
	</bean>
	<bean id="empC" class="cn.zwb.vo.Emp">
		<property name="empno" value="7369"></property>
		<property name="ename" value="zwb"></property>
		<property name="dept" ref="dept"></property>
	</bean>
        所有可以在程序中配置1结构关系,现在完全可以通过配置文件横向替代了.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值