装配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=& ...
随机推荐
- vue-grid-layout
vue-grid-layout vue-grid-layout is a grid layout system, like Gridster, for Vue.js. Heavily inspi ...
- Python全栈开发:模块
模块,用一砣代码实现了某个功能的代码集合. 参考资源:http://www.cnblogs.com/alex3714/articles/5161349.html 类似于函数式编程和面向过程编程,函数式 ...
- idea-----使用相关快捷键
1.快速格式化代码:Ctrl+Alt+L 2.快速引入get.set方法:ALT+insert 3.win 10锁屏:win+L 4.查找接口实现类的快捷键:ctrl+alt+b
- limit方法也是模型类的连贯操作方法之一
limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 限制结果数量 例如获取满足要求的 ...
- 使用 SourceTree 操作时弹出 password required
通过 https 的方式克隆仓库的,SourceTree 推送等操作的时候会弹出提示要求输入密码. 在仓库里面设置: 远程仓库-选中仓库-点击编辑-修改 url 路径, 路径格式,以码云为例: htt ...
- Joomla - 部署(线上部署)
一.线上部署 线上部署可以理解为把本地网站迁移到线上,使用 akeeba backup 进行备份和迁移即可 参考 Joomla - akeeba backup(joomla网站备份.迁移扩展)的第三. ...
- Laravel 5.8 添加服务层
参考网址:https://blog.csdn.net/dmt742055597/article/details/97192177#Laravel58service_1
- 微信小程序chooseImage(从本地相册选择图片或使用相机拍照)
一.使用API wx.chooseImage(OBJECT) var util = require('../../utils/util.js') Page({ data:{ src:"../ ...
- #、%和$符号在OGNL表达式中的作用
#.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里笔者简单介绍它们的相应用途. 1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例中的#ses ...
- 《DSP using MATLAB》Problem 7.36
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...