有参构造方法
1,传基本数据类型
constructor-arg子标签:指定创建类对象时使用哪个构造函数,每一对或每一个constructor-arg子标签配置一个参数列表中的参数值;如果不配置子标签,则默认使用无参构造函数实例化对象
属性
name属性:通过参数名找到参数列表中对应参数
index属性:通过参数在参数列表中的索引找到参数列表中对应参数,index从0开始:
type属性:通过参数数据类型找到参数列表中对应参数
value属性:设置参数列表参数对应的值,用于设定基本数据类型和String类型的数据
例:详述以上属性
说明:按照参数在参数列表中的正常顺序进行配置,此时不需要设置name、index或type属性;如果不按照参数在参数列表中的正常顺序进行配置,则需要设定name、index或type属性,否则配置错误。
1,name
创建Student类,写如下代码
package com.zzu.vo;
public class Student {
public Student(String name) { //构造方法
System.out.println(name);
}
public Student(int age) { //构造方法
System.out.println(age);
}
public Student(String name,int age) { //构造方法
System.out.println(name+";"+age);
}
}
在application.xml中配置如下信息
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg name="name" value="tom"></constructor-arg> <!-- name指的是构造方法所传参数 -->
</bean>
Test类中代码如下
运行得到如下结果
调用了如下构造方法
public Student(String name) { //构造方法
System.out.println(name);
}
在application.xml中配置如下信息:
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg name="age" value="2"></constructor-arg>
<constructor-arg name="name" value="tom"></constructor-arg>
</bean>
2,index
其他文件代码不变,application.xml中配置如下信息
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg index="0" value="tom"></constructor-arg>
<constructor-arg index="1" value="2"></constructor-arg>
</bean>
得到如下结果
3,type
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg type="java.lang.String" value="tom"></constructor-arg>
<constructor-arg type="int" value="2"></constructor-arg>
</bean>
得到如下结果
注意:
name、index和type三个constructor-arg标签属性没有必要同时出现在constructor-arg标签中。
2,传引用类型
ref属性:如果参数值为非基本数据类型,则可通过ref为参数注入值,其值为另一个bean标签id或name属性的属性值,如下:
Student类中仅写如下代码
public Student(Date date) { //构造方法
System.out.println(date);
}
application.xml中配置如下信息
<!-- 对自定义类型,需要先创建date对象,在student对象中用ref关联 -->
<bean id="date" class="java.util.Date"></bean>
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg ref="date"></constructor-arg>
</bean>
Test中代码不变,得到如下结果
数组
1,传基本数据类型
Student类中仅写如下代码
public Student(double [] scores) { //数组
for (double score : scores) {
System.out.println(score);
}
}
application.xml中配置如下信息
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<array>
<value>100</value>
<value>110</value>
</array>
</constructor-arg>
</bean>
得到如下结果
2,传引用数据类型
public Student(Date [] dates) { //数组:自定义类型
for (Date date : dates) {
System.out.println(date);
}
}
第一种方法,用标签ref
<bean id="date" class="java.util.Date"></bean>
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<array>
<ref bean="date"/>
<ref bean="date"/>
</array>
</constructor-arg>
</bean>
第二种方法,用标签bean
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<array>
<bean class="java.util.Date"></bean>
<bean class="java.util.Date"></bean>
</array>
</constructor-arg>
</bean>
集合
List
如果List集合元素为基本数据类型包装类或String类型,则可通过value标签设置值;如果为其它引用类型的数据则可以通过bean标签或ref标签设置元素值,每对标签设置一个集合元素。
1,基本数据类型包装类
public Student(String name, double [] scores) {
System.out.println(name + "的成绩如下:");
for (double score : scores) {
System.out.println(score);
}
}
<bean class="com.zzu.vo.Student">
<constructor-arg value="张三"></constructor-arg>
<constructor-arg>
<list>
<value>77</value>
<value>82</value>
</list>
</constructor-arg>
</bean>
2,引用数据类型
public Student(List<Date> dates) { //集合,自定义类型,基本数据类型
for (Date date : dates) {
System.out.println(date);
}
}
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<list>
<bean class="java.util.Date"></bean>
</list>
</constructor-arg>
</bean>
Test类中代码不变
Set
如果Set集合元素为基本数据类型包装类或String类型,则可通过value标签设置值;如果为其它引用类型的数据则可以通过bean标签或ref标签设置元素值,每对标签设置一个集合元素。
1,基本数据类型包装类
public Student(String name, Set<Double> scores) {
System.out.println(name + "的成绩如下:");
for (double score : scores) {
System.out.println(score);
}
}
<bean class="com.zzu.vo.Student">
<constructor-arg value="张三"></constructor-arg>
<constructor-arg>
<set>
<value>77</value>
<value>82</value>
</set>
</constructor-arg>
</bean>
2,自定义类型
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<set>
<bean class="java.util.Date"></bean>
</set>
</constructor-arg>
</bean>
public Student(Set<Date> dates) { //集合:传自定义类型
for (Date date : dates) {
System.out.println(date);
}
}
Map
注意:
1、如果Map集合的键为基本数据类型包装类或String类型,则可通过key属性直接设置;如果为引用类型(如String类型)的数据则可以通过entry 标签的key-ref标签属性(其值为另一个bean标签id或name属性的属性值)或key子标签(key子标签含有bean子标签或ref子标签)进行设置。
2、如果Map集合的值为基本数据类型包装类或String类型,则可通过value属性直接设置;如果为引用类型(如String类型)的数据则可以通过entry 标签的value-ref标签属性(其值为另一个bean标签id或name属性的属性值)或entry 标签bean子标签、ref子标签、list子标签(如果Map集合值为List集合)、set子标签(如果Map集合值为Set集合)或map子标签(如果Map集合值为Map集合)进行设置。
I,key和value都为基本数据类型包装类
public Student(Map<String,Double> map) {
Set<String> keys=map.keySet();//得到所有的key
for (String key : keys) {
System.out.println(map.get(key));//get方法,可以用key得到value
}
}
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<map>
<entry key="语文" value="100"></entry>
<entry key="数学" value="120"></entry>
</map>
</constructor-arg>
</bean>
II,key为引用类型
<bean id="date" class="java.util.Date"></bean>
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<map>
<entry key-ref="date" value="100"></entry>
</map>
</constructor-arg>
</bean>
public Student(Map<Date,Double> map) { //集合:传自定义类型
Set<Date> keys=map.keySet();//得到所有的key
for (Date key : keys) {
System.out.println(key+";"+map.get(key));//get方法,可以用key得到value
}
}
III,value为引用类型
<bean id="lao" class="com.zzu.vo.Address">
<property name="detail" value="郑州"></property>
</bean>
<bean id="yi" class="com.zzu.vo.Address">
<property name="detail" value="郑州"></property>
</bean>
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<map>
<entry key="姥" value-ref="lao"></entry> <!-- 将属性引过来 -->
<entry key="姨" value-ref="yi"></entry>
</map>
</constructor-arg>
</bean>
public Student(Map<String,Address> map) { //集合:传自定义类型
Set<String> keys=map.keySet();//得到所有的key
for (String key : keys) {
System.out.println(key+";"+map.get(key).getDetail());//get方法,可以用key得到value
}
}
Properties
props子标签:为Properties类型的参数赋值
<bean name="student" class="com.zzu.vo.Student">
<constructor-arg>
<props>
<prop key="name">tom</prop>
<prop key="score">100</prop>
</props>
</constructor-arg>
</bean>
public Student(Properties properties) { //集合:传自定义类型
System.out.println(properties.get("name"));
System.out.println(properties.get("score"));
}