SpringMVC框架是如何配置类的构造方法的呢,来探究一下?
(感觉比较长的可以直接拉到最后看总结)
- 基本类型
- string
- 引用类型
- list集合
- 基本类型或string
- 引用类型
- 数组集合
- 基本类型或string
- 引用类型
- set集合
- 基本类型或string
- 引用类型
- map集合
- 基本类型或string
- 引用类型
- 总结
首先,做好前期的准备工作,新建java项目,引入相关的包,
配置springMVC文件:(application.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="vo.Student"> <!-- 研究类 -->
</bean>
</beans>
新建一个Student类作为研究对象:
package vo;
public class Student {
public Student() {
System.out.println("无参构造方法");
}
}
新建一个Test类来观察结果:
package Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import vo.Student;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
Student student = applicationContext.getBean(Student.class);
}
}
这是无参构造方法的配置,输出结果:
无参构造方法
接下来开始不同情况下的配置情况:
1. 基本类型
Student类:
package vo;
public class Student {
private int age;
public Student(int age) {
this.age = age;
System.out.println("基本类型: "+age);
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="age"> <!-- name为变量名 -->
<value>12</value> <!-- value为变量值 -->
</constructor-arg>
</bean>
输出结果:
基本类型: 12
2. String类型
Student类:
package vo;
public class Student {
private String name;
public Student(String name) {
this.name = name;
System.out.println("String类型: "+name);
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="name"> <!-- name为变量名 -->
<value>Tom</value> <!-- value为变量值 -->
</constructor-arg>
</bean>
输出结果:
String类型: Tom
基本类型和String类型在配置时并无区别
3. 引用类型
Student类:
package vo;
import java.util.Date;
public class Student {
private Date date;
public Student(Date date) {
this.date = date;
System.out.println("引用类型: "+date);
}
}
application.xml配置:
<bean id="date" class="java.util.Date"></bean> <!-- 先新建此引用类型的对象并设置id -->
<bean class="vo.Student">
<constructor-arg name="date" ref="date"> <!-- name为变量名 -->
<!-- ref为引用对象的id -->
</constructor-arg>
</bean>
输出结果:
引用类型: Tue May 07 21:52:19 CST 2019
引用类型不太一样,需要先创建一个此引用类型的对象并设置id,相当于直接通过ref将引用对象引用过来
4. list集合
基本类型及String类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
public class Student {
private List<String> names;
public Student(List<String> names) {
this.names = names;
System.out.println("list 集合-基本类型: ");
for (String name : names) {
System.out.println(name);
}
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="names"> <!-- name为变量名 -->
<list>
<value>mama</value> <!-- value为list集合中的元素 -->
<value>baba</value>
</list>
</constructor-arg>
</bean>
输出结果:
s集合-基本类型及String:
mama
baba
在list标签中的value标签存储元素
引用类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
public class Student {
private List<Date> dates;
public Student(List<Date> dates) {
this.dates = dates;
System.out.println("list集合-引用类型: ");
for (Date date : dates) {
System.out.println(date);
}
}
}
application.xml配置:
<bean id="date" class="java.util.Date"></bean> <!-- 先新建此引用类型的对象并设置id -->
<bean class="vo.Student">
<constructor-arg name="dates"> <!-- name为变量名 -->
<list>
<bean class="java.util.Date"></bean> <!-- 新建一个引用类型变量,类似局部变量 -->
<ref bean="date"/> <!-- 引用创建好的引用类型变量 -->
</list>
</constructor-arg>
</bean>
输出结果:
list集合-引用类型:
Tue May 07 22:10:06 CST 2019
Tue May 07 22:10:06 CST 2019
两种方式存储元素
1.在list标签新建一个引用类型对象
2.在list标签中引用一个创建好的引用类型对象
5. 数组集合
基本类型及String类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
public class Student {
private String[] names;
public Student(String[] names) {
this.names = names;
System.out.println("数组集合-基本类型: ");
for (String name : names) {
System.out.println(name);
}
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="names"> <!-- name为变量名 -->
<list>
<value>mama</value> <!-- value为list集合中的元素 -->
<value>baba</value>
</list>
</constructor-arg>
</bean>
输出结果:
数组集合-基本类型及String:
mama
baba
与list集合配置方式一样
引用类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
public class Student {
private Date[] dates;
public Student(Date[] dates) {
this.dates = dates;
System.out.println("数组集合-引用类型: ");
for (Date date : dates) {
System.out.println(date);
}
}
}
application.xml配置:
<bean id="date" class="java.util.Date"></bean> <!-- 先新建此引用类型的对象并设置id -->
<bean class="vo.Student">
<constructor-arg name="dates"> <!-- name为变量名 -->
<list>
<bean class="java.util.Date"></bean> <!-- 新建一个引用类型变量,类似局部变量 -->
<ref bean="date"/> <!-- 引用创建好的引用类型变量 -->
</list>
</constructor-arg>
</bean>
输出结果:
数组集合-引用类型:
Tue May 07 22:15:17 CST 2019
Tue May 07 22:15:17 CST 2019
与list集合配置方式一样
6. set集合
基本类型及String类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
import java.util.Set;
public class Student {
private Set<String> names;
public Student(Set<String> names) {
this.names = names;
System.out.println("set集合-基本类型: ");
for (String name : names) {
System.out.println(name);
}
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="names"> <!-- name为变量名 -->
<set>
<value>baba</value> <!-- value为set集合中的元素 -->
<value>mama</value>
</set>
</constructor-arg>
</bean>
输出结果:
set集合-基本类型:
mama
baba
除了list标签换成set标签与list集合配置方式一样
引用类型
Student类:
package vo;
import java.util.Date;
import java.util.List;
import java.util.Set;
public class Student {
private Set<Date> dates;
public Student(Set<Date> dates) {
this.dates = dates;
System.out.println("set集合-引用类型: ");
for (Date date : dates) {
System.out.println(date);
}
}
}
application.xml配置:
<bean id="date" class="java.util.Date"></bean> <!-- 先新建此引用类型的对象并设置id -->
<bean class="vo.Student">
<constructor-arg name="dates"> <!-- name为变量名 -->
<set>
<ref bean="date"/> <!-- 引用创建好的引用类型变量 -->
<bean class="java.util.Date"></bean> <!-- 新建一个引用类型变量,类似局部变量 -->
</set>
</constructor-arg>
</bean>
输出结果:
set集合-引用类型:
Tue May 07 22:29:07 CST 2019
Tue May 07 22:29:07 CST 2019
除了list标签换成set标签与list集合配置方式一样
7. map集合
基本类型及String类型
Student类:
package vo;
import java.util.Map;
import java.util.Set;
public class Student {
private Map<String,Integer> infos;
public Student(Map<String,Integer> infos) {
this.infos = infos;
System.out.println("map集合-基本类型: ");
Set<String> keys = infos.keySet();
for (String key : keys) {
System.out.println(key+":"+infos.get(key));
}
}
}
application.xml配置:
<bean class="vo.Student">
<constructor-arg name="infos"> <!-- name为变量名 -->
<map> <!-- 在entry中保存键和值 -->
<entry key="123" value="14"></entry> <!-- key和value分别保存键和值, -->
<entry key="321" value="21"></entry>
</map>
</constructor-arg>
</bean>
输出结果:
map集合-基本类型:
123:14
321:21
要在map标签中的entry标签中配置,一个代表一组键值
引用类型
Student类:
package vo;
import java.util.Date;
import java.util.Map;
import java.util.Set;
public class Student {
private Map<String,Date> infos;
public Student(Map<String,Date> infos) {
this.infos = infos;
System.out.println("map集合-引用类型: ");
Set<String> keys = infos.keySet();
for (String key : keys) {
System.out.println(key+":"+infos.get(key));
}
}
}
application.xml配置:
<bean id="date" class="java.util.Date"></bean> <!-- 先新建此引用类型的对象并设置id -->
<bean id="date2" class="java.util.Date"></bean>
<bean class="vo.Student">
<constructor-arg name="infos"> <!-- name为变量名 -->
<map> <!-- 在entry中保存一个键和值 -->
<entry key="123" value-ref="date"></entry> <!-- key和value分别保存键和值,如果引用类型使用key-ref和value-ref -->
<entry key="321" value-ref="date2"></entry> <!-- 如果为引用类型,只能引用上面创建好的对象,不能单独创建 -->
</map>
</constructor-arg>
</bean>
输出结果:
map集合-引用类型:
123:Wed May 08 15:59:16 CST 2019
321:Wed May 08 15:59:16 CST 2019
在map标签中的entry配置,不同的是引用类型只能使用上面创建好的
8.总结
1.constructor-arg标签括号内的name属性的值为变量名字
<constructor-arg name="name">
</constructor-arg>
2.基本类型与string类型的创建并无区别
3.基本类型在constructor-arg标签内的value标签创建
<value>123</value>
4.引用类型在constructor-arg括号内的ref属性创建,要引用一个上面创建过的对象
<constructor-arg name="date" ref="date">
</constructor-arg>
5.数组类型与list集合类型形式一样
6.集合类型中list和set形式一样,仅list和set标签名字不一样
7.list,set集合均为在constructor-arg标签内新增list或set标签
标签内若为基本类型,与上面形式一样,创建value标签
标签内若为引用类型,有两种配置方法:
<list>
<bean class="java.util.Date"></bean> <!-- 新建一个引用类型变量,类似局部变量 --> <!-- 方法1 -->
<ref bean="date"/> <!-- 引用创建好的引用类型变量 --> <!-- 方法2 -->
</list>
8.map集合最为特殊:
在constructor-arg标签内新建map标签,在map标签内新建entry标签括号内配置
entry标签括号内需要配置两个属性:
若键为基本类型配置key属性,引用类型则配置key-ref属性
若值为基本类型配置value属性,引用类型则配置value-ref属性
<map> <!-- 在entry中保存一个键和值 -->
<entry key="123" value-ref="date"></entry> <!-- key和value分别保存键和值,如果引用类型使用key-ref和value-ref -->
<entry key="321" value-ref="date2"></entry> <!-- 如果为引用类型,只能引用上面创建好的对象,不能单独创建 -->
</map>
map中若配置引用类型,只能使用上面创建好的对象引用过来这一种方式,而不能单独创建对象