spring中如何为构造方法中不同数据类型参数赋值

有参构造方法

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"));
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值