一、Spring基于XML装配Bean
Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。
Spring 基于 XML 的装配通常采用两种实现方式,即设值注入(Setter Injection)和构造注入(Constructor Injection)。本节将讲解如何在XML配置文件中使用这两种注入方式。
在 Spring 实例化 Bean 的过程中,首先会调用默认的构造方法实例化 Bean 对象,然后通过 Java 的反射机制调用 setXxx() 方法进行属性的注入。因此,设值注入要求一个 Bean 的对应类必须满足以下两点要求。
A.必须提供一个默认的无参构造方法。
B.必须为需要注入的属性提供对应的 setter 方法。
使用设值注入时,在 Spring 配置文件中,需要使用 <bean> 元素的子元素 <property> 元素为每个属性注入值。
而使用构造注入时,在配置文件中,主要使用 <constructor-arg> 标签定义构造方法的参数,可以使用其 value 属性(或子元素)设置该参数的值。
下面通过案例演示基于XML方式的Bean对不同类型数据的装配。
1.创建项目,完善结构,导入依赖
2.创建ClassBean类
package com.wangxing.springdemo6;
/**
* 练习设置注入(set注入)(property)和构造注入(constructio-arg)
*/
public class ClassBean {
private String classcode;
private String classname;
public String getClasscode() {
return classcode;
}
public void setClasscode(String classcode) {
this.classcode = classcode;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
}
3.创建StudentBean类
package com.wangxing.springdemo6;
import java.util.*;
public class StudentBean {
//基本数据类型
private int intVal;
private double doubleVal;
private char charVal;
private boolean booleanVal;
//String
private String stringVal;
//时间日期型
private Date dateVal;
//对象型
private ClassBean classBeanVal;
//数组
private String[] stringArrayVal;
private ClassBean[] classBeansVal;
//List
private List<String> stringListVal;
private List<ClassBean> classBeanListVal;
//Set
private Set<String> stringSetVal;
private Set<ClassBean> classBeanSetVal;
public Set<String> getStringSetVal() {
return stringSetVal;
}
public void setStringSetVal(Set<String> stringSetVal) {
this.stringSetVal = stringSetVal;
}
public Set<ClassBean> getClassBeanSetVal() {
return classBeanSetVal;
}
public void setClassBeanSetVal(Set<ClassBean> classBeanSetVal) {
this.classBeanSetVal = classBeanSetVal;
}
//Map
private Map<String,String> stringMapVal;
private Map<String,ClassBean> stringClassBeanMap;
//Properties
private Properties propertiesVal;
public int getIntVal() {
return intVal;
}
public void setIntVal(int intVal) {
this.intVal = intVal;
}
public double getDoubleVal() {
return doubleVal;
}
public void setDoubleVal(double doubleVal) {
this.doubleVal = doubleVal;
}
public char getCharVal() {
return charVal;
}
public void setCharVal(char charVal) {
this.charVal = charVal;
}
public boolean isBooleanVal() {
return booleanVal;
}
public void setBooleanVal(boolean booleanVal) {
this.booleanVal = booleanVal;
}
public String getStringVal() {
return stringVal;
}
public void setStringVal(String stringVal) {
this.stringVal = stringVal;
}
public Date getDateVal() {
return dateVal;
}
public void setDateVal(Date dateVal) {
this.dateVal = dateVal;
}
public ClassBean getClassBeanVal() {
return classBeanVal;
}
public void setClassBeanVal(ClassBean classBeanVal) {
this.classBeanVal = classBeanVal;
}
public String[] getStringArrayVal() {
return stringArrayVal;
}
public void setStringArrayVal(String[] stringArrayVal) {
this.stringArrayVal = stringArrayVal;
}
public ClassBean[] getClassBeansVal() {
return classBeansVal;
}
public void setClassBeansVal(ClassBean[] classBeansVal) {
this.classBeansVal = classBeansVal;
}
public List<String> getStringListVal() {
return stringListVal;
}
public void setStringListVal(List<String> stringListVal) {
this.stringListVal = stringListVal;
}
public List<ClassBean> getClassBeanListVal() {
return classBeanListVal;
}
public void setClassBeanListVal(List<ClassBean> classBeanListVal) {
this.classBeanListVal = classBeanListVal;
}
public Map<String, String> getStringMapVal() {
return stringMapVal;
}
public void setStringMapVal(Map<String, String> stringMapVal) {
this.stringMapVal = stringMapVal;
}
public Map<String, ClassBean> getStringClassBeanMap() {
return stringClassBeanMap;
}
public void setStringClassBeanMap(Map<String, ClassBean> stringClassBeanMap) {
this.stringClassBeanMap = stringClassBeanMap;
}
public Properties getPropertiesVal() {
return propertiesVal;
}
public void setPropertiesVal(Properties propertiesVal) {
this.propertiesVal = propertiesVal;
}
}
4.创建配置文件
<?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">
<!--创建SimpleDateFormat对象-->
<!--SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")-->
<bean id="simpleDateFormat" class="java.text.SimpleDateFormat">
<!--构造方法注入-