constructor-arg子标签
constructor-arg子标签:指定创建类对象时使用哪个构造函数,每一对或每一个constructor-arg子标签配置一个参数列表中的参数值;如果不配置子标签,则默认使用无参构造函数实例化对象
属性
name属性:通过参数名找到参数列表中对应参数
index属性:通过参数在参数列表中的索引找到参数列表中对应参数,index从0开始:
type属性:通过参数数据类型找到参数列表中对应参数
value属性:设置参数列表参数对应的值,用于设定基本数据类型或其包装类和String类型的数据
package com.spring.test; public class Student { public Student(String name, double score) { System.out.println(name + ":" + score); } }
第一种配置方式:按照参数在参数列表中的正常顺序进行配置,此时不需要设置name、index或type属性:
<bean class="com.spring.test.Student"> <constructor-arg value="张三" ></constructor-arg> <constructor-arg value="100" ></constructor-arg> </bean>
第二种配置方式:如果不按照参数在参数列表中的正常顺序进行配置,则需要设定name、index或type属性,否则配置错误:
a、name属性
<bean class="com.spring.test.Student"> <constructor-arg name="score" value="100"></constructor-arg> <constructor-arg name="name" value="张三"></constructor-arg> </bean>
b、index属性
<bean class="com.spring.test.Student"> <constructor-arg index="1" value="100"></constructor-arg> <constructor-arg index="0" value="张三"></constructor-arg> </bean>
c、type属性
<bean class="com.spring.test.Student"> <!-- 此时type可以为java.lang.Double吗?——不可以,要和参数数据类型严格一致 --> <constructor-arg value="100" type="double"></constructor-arg> <!-- 此时type可以为java.lang.Object吗?——不可以,要和参数数据类型严格一致 --> <constructor-arg value="张三" type="java.lang.String"></constructor-arg> </bean>
name、index和type三个constructor-arg标签属性没有必要同时出现在constructor-arg标签中
ref属性:如果参数值为非基本数据类型,则可通过ref为参数注入值,其值为另一个bean标签id或name属性的属性值,如下
package com.spring.test; public class Student { public Student(String name, double score) { System.out.println(name + ":" + score); } }
<bean name="name" class="java.lang.String"> <constructor-arg index="0" value="张三"></constructor-arg> </bean> <bean class="com.spring.test.Student"> <constructor-arg ref="name"></constructor-arg> <constructor-arg value="100"></constructor-arg> </bean>
String类型、基本数据类型或其包装类都可以使用value标签属性赋值
定义一个Student类,生成不同参数个数和类型(方法的重载) 的构造方法 :
public class Student { String name; int age ; public Student(int age) { super(); this.age = age; System.out.println("age:"+age); } public Student(String name) { super(); this.name = name; System.out.println("name:"+name); } public Student(String name, int age) { super(); this.name = name; this.age = age; System.out.println(name+"----"+age); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w