如何使用Spring框架调用构造方法

  • 根据Spring框架中构造方法中参数类型的不同,调用的方法也不同。
  • 概要:通过constructor-arg标签设置构造方法参数值
  • 前提:搭建环境
  1. 构建Spring框架,引如下六个包:

commons-logging-1.2.jar
spring-beans-4.3.10.RELEASE.jar
spring-context-4.3.10.RELEASE.jar
spring-core-4.3.10.RELEASE.jar
spring-expression-4.3.10.RELEASE.jar

  1. 创建一个application.xml,再创建一个普通类和测试类Test

基本数据类型或String类型


总结:如果参数类型为基本参数类型或String类型,则直接使用value标签属性赋值


public class Students {

	private int age;
	private String name;
	
	public Students(int age, String name) {
		this.age = age;
		this.name = name;
		//局部范围内的局部变量名(与全局变量名相同的)覆盖全局变量,通过this调用全局变量
		System.out.println("基本数据类型");
	}

	@Override
	public String toString() {
		return "age=" + age + ", name=" + name;
	}
}
public class Test {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");//创建容器并创建类将其加到此容器中
		Students student = applicationContext.getBean(Students.class);//加载类并创建对象获取信息
		System.out.println(student);
	}
}
	<bean class="com.jd.vo.Students">
		<constructor-arg name="name" value="Jhon"></constructor-arg>
		<constructor-arg name="age" value="18"></constructor-arg>
	</bean>

输出结果:
基本数据类型
age=18, name=Jhon


引用数据类型


总结:如果参数类型是引用数据类型,则用ref标签属性指定对象


import java.util.Date;

public class Students {

	private Date birthday;

	public Students(Date birthday) {
		this.birthday = birthday;
		System.out.println("引用数据类型");
	}
}
public class Test {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
		System.out.println(applicationContext.getBean("date"));
	}
}
		<bean id="date" class="java.util.Date"/>
	 	<bean class="com.jd.vo.Students">
	 		<constructor-arg name="birthday" ref="date"></constructor-arg>
		</bean>

输出结果:
引用数据类型
Thu May 09 23:09:23 CST 2019


数组类型


总结:如果参数类型是数组类型,则用子标签array中的value标签属性设定值


public class Students {

	private int [] scores;

	public Students(int [] scores) {
		this.scores = scores;
		for (int score : scores) {
			System.out.println(score);
		}
		System.out.println("数组类型");
	}
}
public class Test {

	public static void main(String[] args) {
	
		new ClassPathXmlApplicationContext("application.xml");
	   //加载容器后,里面的class="com.jd.vo.Students",相当于创建并加载类,并调用构造方法——>创建对象
		//创建对象时都是调用构造方法来创建的
}
	 <bean class="com.jd.vo.Students">
	 	<constructor-arg name="scores">
	 		<array>
	 			<value>99</value>
	 			<value>100</value>
	 		</array>
	 	</constructor-arg>
	 </bean>

输出结果:
99
100
数组类型


List集合


总结:如果参数类型是List集合,则用list标签里的value标签赋值


import java.util.List;

public class Students {

	private List<String> names;

	public Students(List<String> names) {
		this.names = names;
		for (String name : names) {
			System.out.println(name);
		}
		System.out.println("List集合");
	}
}
public class Test {

	public static void main(String[] args) {
	
		new ClassPathXmlApplicationContext("application.xml");
		//加载容器后,里面的class="com.jd.vo.Students",相当于创建并加载类,并调用构造方法——>创建对象
		//创建对象时都是调用构造方法来创建的
}
	<bean class="com.jd.vo.Students">
	 	<constructor-arg name="names">
	 		<list>
	 			<value>Tom</value>
	 			<value>Jerry</value>
	 		</list>
	 	</constructor-arg>
	 </bean>

输出结果:
Tom
Jerry
List集合


Set集合


总结: 如果参数类型是Set集合,则用set标签里的value标签赋值


import java.util.Set;

public class Students {

	private Set<String> ids;

	public Students(Set<String> ids) {
		this.ids = ids;
		for (String id : ids) {
			System.out.println(id);
		}
		System.out.println("Set集合");
	}
}
public class Test {

	public static void main(String[] args) {
	
		new ClassPathXmlApplicationContext("application.xml");
}
	<bean class="com.jd.vo.Students">
	 	<constructor-arg name="ids">
	 		<set>
	 			<value>123456789</value>
	 			<value>987654321</value>
	 		</set>
	 	</constructor-arg>
	 </bean>

输出结果:
123456789
987654321
Set集合


总结:
如果数组、List、Set集合中的参数类型是基本数据类型或String类型,则使用value标签,
否则使用bean子标签或ref子标签其中一个

import java.util.Date;
import java.util.List;

public class Students {

	private List<Date> dates;

	public Students(List<Date> dates) {
		this.dates = dates;
		for (Date date : dates) {
			System.out.println(date);
		}
	}
}
public class Test {

	public static void main(String[] args) {
	
		new ClassPathXmlApplicationContext("application.xml");
}
<!--bean id="date" class="java.util.Date"/-->
 <bean class="com.jd.vo.Students">
	 	<constructor-arg name="dates">
		 	<list>
		 		<bean class="java.util.Date"/>
		 		<!-- ref bean="date"/-->
		 	</list>
	 	</constructor-arg>
	 </bean>

输出结果:
Fri May 10 23:27:53 CST 2019


Map集合


总结:

  • 如果参数类型是Map集合,则用Map标签赋值,元素使用entry
  • 如果Map 集合中key或value是基本数据类型或者String类型,则使用key或value标签属性,否则使用key-ref或value-ref

import java.util.Date;
import java.util.Map;
import java.util.Set;

public class Students {

	private Map<String,Date> birthdaies;

	public Students(Map<String, Date> birthdaies) {
		this.birthdaies = birthdaies;
		Set<String> keys = birthdaies.keySet();//key是String类型,value是Date类型
		for (String key : keys) {
			Date birthday = birthdaies.get(key);
			System.out.println(birthday);
		}
		System.out.println("Map集合");
	}
}
public class Test {

	public static void main(String[] args) {
	
		new ClassPathXmlApplicationContext("application.xml");
}
  <bean id="date" class="java.util.Date"/>
  <bean class="com.jd.vo.Students">
	 	<constructor-arg name="birthdaies">
	 		<map>
	 			<entry key="爸爸" value-ref="date"></entry>
	 			<entry key="妈妈" value-ref="date"></entry>
	 		</map>
	 	</constructor-arg>
	 </bean>

输出结果:
Fri May 10 23:12:36 CST 2019
Fri May 10 23:12:36 CST 2019
Map集合


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值