基于XML配置的装配
- 基于XML配置的装配方式已经有了很久的历史,曾经是主要的装配方式。通过学习,我们知道Spring提供了两种基于XML的装配方式,即使用构造方法注入和使用属性的setter方法注入。
- 在使用构造方法注入方式装配Bean时,Bean的实现类需要提供参数的构造方法,并在配置文件中使用<bean元素上单子元素<constructor-arg来定义提供构造方法的参数,在使用属性的setter方法注入方式装配Bean时,Bean的实现类需要提供一个默认无参的构造方法,并为需要注入的属性提供对应的setter方法,另外还需要使用<bean元素的子元素<property为每个属性注入值
- 通过一个实例来演示基于XML装配的装配方式
1.创建Bean的实体类
在ComplexUser类中分别使用构造方法注入和使用属性的setter方法注入。
package assemble;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ComplexUser {
private String uname;
private List<String> hobbyList;
private Map<String,String> residenceMap;
private Set<String> aliasSet;
public void setAliasSet(Set<String> aliasSet) {
this.aliasSet = aliasSet;
}
private String[] array;
public String getUname() {
return uname;
}
public List<String> getHobbyList() {
return hobbyList;
}
public Map<String, String> getResidenceMap() {
return residenceMap;
}
public Set<String> getAliasSet() {
return aliasSet;
}
public String[] getArray() {
return array;
}
/*
使用构造方法注入 需要提供带参数的构造方法
*/
public ComplexUser (String uname, List<String> hobbyList, Map<String, String> residenceMap,
Set<String> aliasSet, String... array) {
super();
this.uname = uname;
this.hobbyList = hobbyList;
this.residenceMap = residenceMap;
this.aliasSet = aliasSet;
this.array = array;
}
/*
使用属性的setter方法注入 提供默认无参数的构造方法 并为注入的属性提供setter方法
*/
public ComplexUser(){
super();
}
public void setUname(String uname) {
this.uname = uname;
}
public void setHobbyList(List<String> hobbyList) {
this.hobbyList = hobbyList;
}
public void setResidenceMap(Map<String, String> residenceMap) {
this.residenceMap = residenceMap;
}
public void setArray(String[] array) {
this.array = array;
}
@Override
public String toString(){
return "uname="+uname+",hobbyList"+hobbyList+",residenceMap="+residenceMap+
",aliasSet="+aliasSet+",array="+array;
}
}
2 配置Bean
<!--使用构造方法注入方式装配ComplexUser实例user1-->
<bean id="user1" class="assemble.ComplexUser">
<constructor-arg index="0" value="chenheng1"/>
<constructor-arg index="1">
<list>
<value>唱歌</value>
<value>跳舞</value>
<value>爬山</value>
</list>
</constructor-arg>
<constructor-arg index="2">
<map>
<entry key="dakuab" value="大连"/>
<entry key="beijing" value="北京"/>
<entry key="shanghai" value="上海"/>
</map>
</constructor-arg>
<constructor-arg index="3">
<set>
<value>陈1001</value>
<value>陈1002</value>
<value>陈1003</value>
</set>
</constructor-arg>
<constructor-arg index="4">
<array>
<value>aaaaa</value>
<value>bbbbb</value>
</array>
</constructor-arg>
</bean>
<!--使用属性的setter方法注入方式装配ComplexUser实例user2-->
<bean id="user2" class="assemble.ComplexUser">
<property name="uname" value="chengheng2"></property>
<property name="hobbyList">
<list>
<value>看书</value>
<value>敲代码</value>
</list>
</property>
<property name="residenceMap">
<map>
<entry key="shenzhen" value="深圳"></entry>
<entry key="gaungzhou" value="广州"></entry>
<entry key="tianjin" value="天津"></entry>
</map>
</property>
<property name="aliasSet">
<set>
<value>陈汉1001</value>
<value>陈汉1002</value>
</set>
</property>
<property name="array">
<array>
<value>ccccc</value>
<value>ddddd</value>
</array>
</property>
</bean>
3.测试代码
package test;
import assemble.ComplexUser;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TesAssemble {
public static void main(String[] args) {
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext");
//构造方法
ComplexUser u1= (ComplexUser) appCon.getBean("user1");
System.out.println(u1);
//setter方式
ComplexUser u2=(ComplexUser)appCon.getBean("user2");
System.out.println(u2);
}
}