在任何开发中一定会存在集合的操作,在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结构关系,现在完全可以通过配置文件横向替代了.