装配SpringBean(三)--XML方式实例
前一篇文章中已经介绍了XML方式装配bean的方式,本文将综合这些方式举一个实例并进行测试,我会把所有类型的参数都放在同一个类中进行测试,下面是我的类结构:

上图是我画的一个基本结构,可以看出该类中有基本类型变量、引用变量、属性变量、集合变量且集合元素有基本类型和引用类型,我的引用类型中所有变量使用基本类型,所以先来创建两个引用类型CoderCard和CoderProject。
一、装配bean
1⃣️创建CoderCard.java
public class CoderCard {
private String id;
private String cardNotes;
private String coderId;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getCardNotes() {
return cardNotes;
}
public void setCardNotes(String cardNotes) {
this.cardNotes = cardNotes == null ? null : cardNotes.trim();
}
public String getCoderId() {
return coderId;
}
public void setCoderId(String coderId) {
this.coderId = coderId == null ? null : coderId.trim();
}
}
2⃣️创建CoderProject.java
public class CoderProject {
private String id;
private String projectName;
private String projectVersion;
private String projectDesc;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName == null ? null : projectName.trim();
}
public String getProjectVersion() {
return projectVersion;
}
public void setProjectVersion(String projectVersion) {
this.projectVersion = projectVersion == null ? null : projectVersion.trim();
}
public String getProjectDesc() {
return projectDesc;
}
public void setProjectDesc(String projectDesc) {
this.projectDesc = projectDesc == null ? null : projectDesc.trim();
}
}
3⃣️创建Coder.java
public class Coder {
private String id;
private String coderName;
private Integer coderAge;
private Integer coderSalary;
private CoderCard coderCard;
private Properties prop;
// 集合元素是基本类型
private List<String> coderBugList;
private Map<String, String> coderBugMap;
private Set<String> coderBugSet;
private String[] coderBugArray;
// 集合元素是引用类型
private List<CoderProject> coderProjectList;
private Map<CoderCard, CoderProject> coderProjectMap;
private Set<CoderProject> coderProjectSet;
private CoderProject[] coderProjectArray;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getCoderName() {
return coderName;
}
public void setCoderName(String coderName) {
this.coderName = coderName == null ? null : coderName.trim();
}
public Integer getCoderAge() {
return coderAge;
}
public void setCoderAge(Integer coderAge) {
this.coderAge = coderAge;
}
public Integer getCoderSalary() {
return coderSalary;
}
public void setCoderSalary(Integer coderSalary) {
this.coderSalary = coderSalary;
}
public CoderCard getCoderCard() {
return coderCard;
}
public void setCoderCard(CoderCard coderCard) {
this.coderCard = coderCard;
}
public List<String> getCoderBugList() {
return coderBugList;
}
public void setCoderBugList(List<String> coderBugList) {
this.coderBugList = coderBugList;
}
public Map<String, String> getCoderBugMap() {
return coderBugMap;
}
public void setCoderBugMap(Map<String, String> coderBugMap) {
this.coderBugMap = coderBugMap;
}
public Set<String> getCoderBugSet() {
return coderBugSet;
}
public void setCoderBugSet(Set<String> coderBugSet) {
this.coderBugSet = coderBugSet;
}
public Properties getProp() {
return prop;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public String[] getCoderBugArray() {
return coderBugArray;
}
public void setCoderBugArray(String[] coderBugArray) {
this.coderBugArray = coderBugArray;
}
public List<CoderProject> getCoderProjectList() {
return coderProjectList;
}
public void setCoderProjectList(List<CoderProject> coderProjectList) {
this.coderProjectList = coderProjectList;
}
public Map<CoderCard, CoderProject> getCoderProjectMap() {
return coderProjectMap;
}
public void setCoderProjectMap(Map<CoderCard, CoderProject> coderProjectMap) {
this.coderProjectMap = coderProjectMap;
}
public Set<CoderProject> getCoderProjectSet() {
return coderProjectSet;
}
public void setCoderProjectSet(Set<CoderProject> coderProjectSet) {
this.coderProjectSet = coderProjectSet;
}
public CoderProject[] getCoderProjectArray() {
return coderProjectArray;
}
public void setCoderProjectArray(CoderProject[] coderProjectArray) {
this.coderProjectArray = coderProjectArray;
}
}
4⃣️XML中进行装配:spring-bean.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 id="coder" class="com.hyc.pojo.Coder">
<!-- 装配简易值 -->
<property name="id" value="1"></property>
<property name="coderName" value="张三"></property>
<property name="coderAge" value="26"></property>
<property name="coderSalary" value="10000"></property>
<!--装配对象 -->
<property name="coderCard" ref="coderCard"></property>
<!-- 装配Properties -->
<property name="prop">
<props>
<prop key="bug-key-1">bug-prop-1</prop>
<prop key="bug-key-2">bug-prop-2</prop>
<prop key="bug-key-3">bug-prop-3</prop>
</props>
</property>
<!-- 装配集合,集合元素是基本类型 -->
<!-- 基本类型-装配List -->
<property name="coderBugList">
<list>
<value>bug-list-1</value>
<value>bug-list-2</value>
<value>bug-list-3</value>
</list>
</property>
<!-- 基本类型-装配Map -->
<property name="coderBugMap">
<map>
<entry key="bug1" value="bug-map-1" />
<entry key="bug2" value="bug-map-2" />
<entry key="bug3" value="bug-map-3" />
</map>
</property>
<!-- 基本类型-装配Set -->
<property name="coderBugSet">
<set>
<value>bug-set-1</value>
<value>bug-set-2</value>
<value>bug-set-3</value>
</set>
</property>
<!-- 基本类型-装配Array -->
<property name="coderBugArray">
<array>
<value>bug-array-1</value>
<value>bug-array-2</value>
<value>bug-array-3</value>
</array>
</property> <!-- 装配集合,集合元素是引用类型 -->
<!-- 引用类型-装配List -->
<property name="coderProjectList">
<list>
<ref bean="coderProject1" />
<ref bean="coderProject2" />
</list>
</property>
<!-- 引用类型-装配Map -->
<property name="coderProjectMap">
<map>
<entry key-ref="coderCard1" value-ref="coderProject1" />
<entry key-ref="coderCard2" value-ref="coderProject2" />
</map>
</property>
<!-- 引用类型-装配Set -->
<property name="coderProjectSet">
<set>
<ref bean="coderProject1" />
<ref bean="coderProject2" />
</set>
</property>
<!-- 引用类型-装配Array -->
<property name="coderProjectArray">
<array>
<ref bean="coderProject1" />
<ref bean="coderProject2" />
</array>
</property>
</bean> <!-- 对象作为成员变量 -->
<bean id="coderCard" class="com.hyc.pojo.CoderCard">
<property name="id" value="1"></property>
<property name="cardNotes" value="张三的工牌"></property>
<property name="coderId" value="1"></property>
</bean>
<!-- 对象作为成员变量 -->
<bean id="coderCard1" class="com.hyc.pojo.CoderCard">
<property name="id" value="2"></property>
<property name="cardNotes" value="李四的工牌"></property>
<property name="coderId" value="2"></property>
</bean> <bean id="coderCard2" class="com.hyc.pojo.CoderCard">
<property name="id" value="3"></property>
<property name="cardNotes" value="王麻子的工牌"></property>
<property name="coderId" value="3"></property>
</bean> <bean id="coderProject1" class="com.hyc.pojo.CoderProject">
<property name="id" value="1"></property>
<property name="projectName" value="管理系统"></property>
<property name="projectVersion" value="V1.0"></property>
<property name="projectDesc" value="管理配置"></property>
</bean>
<bean id="coderProject2" class="com.hyc.pojo.CoderProject">
<property name="id" value="2"></property>
<property name="projectName" value="存储系统"></property>
<property name="projectVersion" value="V1.0"></property>
<property name="projectDesc" value="存储配置"></property>
</bean> </beans>
二、测试装配结果
1⃣️编写测试方法
因为我测试使用的是junit单元测试,所以先来编写一个单元测试积基类,完成ClassPathXmlApplicationContext类的实例化等操作;
第一步:创建单元测试基类
package com.test.xml; import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Unit test for simple App.
*/
public class BaseTest { public String xmlPath;
public ClassPathXmlApplicationContext context; public BaseTest(String xmlPath) {
this.xmlPath = xmlPath;
} @Before
public void before() {
if (xmlPath.isEmpty()) {
xmlPath = "classpath*:spring-*.xml";
}
context = new ClassPathXmlApplicationContext(xmlPath.split("[,\\s]"));
context.start();
} @SuppressWarnings("deprecation")
@After
public void after() {
context.destroy();
} }
第二步:创建bean装配的测试类,编写测试方法
package com.test.xml; import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; import org.junit.Test; import com.hyc.controller.CoderController;
import com.hyc.pojo.Coder;
import com.hyc.pojo.CoderCard;
import com.hyc.pojo.CoderProject; /*
* 各种数据类型装载测试(XML方式)
*/
public class SpringBeanTest extends BaseTest {
public SpringBeanTest() {
super("classpath*:spring-bean.xml");
} /**
* 基本数据类型装配测试
*/
@Test
public void testBaseBean() {
Coder coder = (Coder) super.context.getBean("coder");
String name = coder.getCoderName();
System.out.println("name:" + name);
int age = coder.getCoderAge();
System.out.println("age:" + age);
int salary = coder.getCoderSalary();
System.out.println("salary:" + salary);
String cardNotes = coder.getCoderCard().getCardNotes();
System.out.println("cardNotes:" + cardNotes);
Properties props = coder.getProp();
System.out.println("props:" + props.getProperty("bug-key-1"));
} /**
* 装配集合类型,集合元素是基本数据类型
*/
@Test
public void testBaseCollection() {
Coder coder = (Coder) super.context.getBean("coder");
List<String> bugList = coder.getCoderBugList();
System.out.println("bugList:" + bugList.size());
Map<String, String> bugMap = coder.getCoderBugMap();
System.out.println("bugMap:" + bugMap.size());
String[] bugArray = coder.getCoderBugArray();
System.out.println("bugArray:" + bugArray.length);
Set<String> bugSet = coder.getCoderBugSet();
System.out.println("bugSet:" + bugSet.size());
} /**
* 装配集合类型,集合元素是引用类型
*/
@Test
public void testRefCollection() {
Coder coder = (Coder) super.context.getBean("coder");
List<CoderProject> projectList = coder.getCoderProjectList();
System.out.println("projectList:" + projectList.size());
Map<CoderCard, CoderProject> projectMap = coder.getCoderProjectMap();
System.out.println("projectMap:" + projectMap.size());
CoderProject[] projectArray = coder.getCoderProjectArray();
System.out.println("projectArray:" + projectArray.length);
Set<CoderProject> projectSet = coder.getCoderProjectSet();
System.out.println("projectSet:" + projectSet.size());
} }
以上就是测试代码:
第一个方法是测试基本类型、引用类型和Properties类型;
第二个方法是测试集合类型,集合元素是基本类型;
第三个方法是测试集合类型,集合元素是引用类型;
测试时只要选中方法名,右击-Run As-Junit Test即可,如果要同时测试所有的方法,直接在该类中右击-Run As-Junit Test就行。测试集合的时候我只是输出了集合的size
2⃣️查看测试结果

以上就是通过XML装配bean的完整实例,其实这种方式是比较简单的,缺点是需要配置很多内容,为了解决这一缺陷,spring又提供了另外一种注解的方式,下一篇文章我将进行总结。
装配SpringBean(三)--XML方式实例的更多相关文章
- 装配SpringBean(二)--XML方式介绍
装配SpringBean,我理解的意思就在容器中定义一个bean,然后让容器通过某种方式找到它.因为在Spring中一切皆资源,资源就是所谓的bean,我们怎么才能从容器中获取这些资源呢?那就是控制反 ...
- IOC装配Bean(XML方式)
Spring框架Bean实例化的方式 提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 无参数构造方法的实例化 <!-- 默认情况下使用的就是 ...
- Spring AOP(三)--XML方式实现
本文介绍通过XML方式实现Spring AOP,在上一篇中已经介绍了通过注解+java配置的方式,这篇文章主要是看XML中怎么配置,直接上代码了: 一.创建一个连接点 1⃣️定义接口 注意⚠️:可以定 ...
- Shiro缓存使用Redis、Ehcache、自带的MpCache实现的三种方式实例
第一种:使用Redis做缓存,将数据存储到redis数据库中 第一步:在项目里面引入redis,配置文件如下: 配置文件:spring_shiro_redis.xml <?xml version ...
- IoC容器装配Bean(xml配置方式)(Bean的生命周期)
1.Spring管理Bean,实例化Bean对象 三种方式 第一种:使用类构造器实例化(默认无参数) package cn.itcast.spring.initbean; /** * 使用构造方法 实 ...
- Spring——自动装配的三种实现方式
依赖注入的本质是装配,装配是依赖注入的具体行为 spring会在上下文中自动寻找,并自动给bean装配属性 自动装配的三种方式 (1).在xml中显式的装配 (2).在java中显式的装配 (3).隐 ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
- Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...
- 04_IOC容器装配Bean(xml方式)
IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...
随机推荐
- SPSS Modeler数据挖掘:回归分析
SPSS Modeler数据挖掘:回归分析 1 模型定义 回归分析法是最基本的数据分析方法,回归预测就是利用回归分析方法,根据一个或一组自变量的变动情况预测与其相关的某随机变量的未来值. 回归分析是研 ...
- Tomcat点击项目名称,加载一个action请求
<meta http-equiv="refresh" content="0;url=index.action">
- CF627A Xor Equation
题意:a+b=s,a^b=x(异或).问有多少有序Z+对(a,b)满足条件. 标程: #include<cstdio> using namespace std; typedef long ...
- [JZOJ4763] 【NOIP2016提高A组模拟9.7】旷野大计算
题目 题目大意 给你一个数列,有很多个询问,询问一段区间内,某个数乘它的出现次数的最大值,也就是带权众数. 思考历程 第一次看到这道题,立马想到了树套树之类的二位数据结构,发现不行.(就算可以也很难打 ...
- 查看pip install *.whl 支持的文件版本
import pip._internalprint(pip._internal.pep425tags.get_supported())[('cp37', 'cp37m', 'manylinux2010 ...
- 网络工程师课程---3、IP与路由器(ip地址的主要作用是什么)
网络工程师课程---3.IP与路由器(ip地址的主要作用是什么) 一.总结 一句话总结: 用来标识一个节点的网络地址 划分网段 1.如何得到ip地址的网段号? ip和子网掩码 化成二进制后取 与运算 ...
- windows 可执行文件分析
windows可执行文件是什么? 是具有PE文件格特性的文件,例如:.exe.dll.ocx等文件. 注:(这里只是让大家能明了一些,其实,可执行与否,和后缀没有什么关系,后缀只是windows方便管 ...
- System.Web.Mvc.FilePathResult.cs
ylbtech-System.Web.Mvc.FilePathResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...
- c# 删除空文件夹
https://www.cnblogs.com/vikimono/p/11066778.html
- final关键字与类型转换
一.关于final的重要知识点; 1.final关键字可以用于成员变量.本地变量.方法以及类. 2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. 3. 你不能够 ...