前一篇文章中已经介绍了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方式实例的更多相关文章

  1. 装配SpringBean(二)--XML方式介绍

    装配SpringBean,我理解的意思就在容器中定义一个bean,然后让容器通过某种方式找到它.因为在Spring中一切皆资源,资源就是所谓的bean,我们怎么才能从容器中获取这些资源呢?那就是控制反 ...

  2. IOC装配Bean(XML方式)

    Spring框架Bean实例化的方式 提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 无参数构造方法的实例化 <!-- 默认情况下使用的就是 ...

  3. Spring AOP(三)--XML方式实现

    本文介绍通过XML方式实现Spring AOP,在上一篇中已经介绍了通过注解+java配置的方式,这篇文章主要是看XML中怎么配置,直接上代码了: 一.创建一个连接点 1⃣️定义接口 注意⚠️:可以定 ...

  4. Shiro缓存使用Redis、Ehcache、自带的MpCache实现的三种方式实例

    第一种:使用Redis做缓存,将数据存储到redis数据库中 第一步:在项目里面引入redis,配置文件如下: 配置文件:spring_shiro_redis.xml <?xml version ...

  5. IoC容器装配Bean(xml配置方式)(Bean的生命周期)

    1.Spring管理Bean,实例化Bean对象 三种方式 第一种:使用类构造器实例化(默认无参数) package cn.itcast.spring.initbean; /** * 使用构造方法 实 ...

  6. Spring——自动装配的三种实现方式

    依赖注入的本质是装配,装配是依赖注入的具体行为 spring会在上下文中自动寻找,并自动给bean装配属性 自动装配的三种方式 (1).在xml中显式的装配 (2).在java中显式的装配 (3).隐 ...

  7. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  8. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  9. 04_IOC容器装配Bean(xml方式)

    IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...

随机推荐

  1. 学习servlet之路--javax-servlet不存在

    我在编译一个servlet菜鸟教程下提供的包含有javax.servlet包的java文件,变异出错, import java.io.*;import javax.servlet.*;import j ...

  2. jquery学习笔记(三):事件和应用

    内容来自[汇智网]jquery学习课程 3.1 页面加载事件 在jQuery中页面加载事件是ready().ready()事件类似于就JavaScript中的onLoad()事件,但前者只要页面的DO ...

  3. django2 连接mysql实现第一个rest framework

    1.安装pymysql,mysqlclient,创建项目django-admin startproject django2 2.settings中把DataBase配置换掉 DATABASES = { ...

  4. 华为-eNSP模拟器路由器无法正常启动一直显示“#”

    问题项如截图: 解决方案: 1. 打开自己电脑的控制面板 -->> 系统和安全 -->> Windows Defender防火墙 (运行应用通过Windows防火墙) 2 .找 ...

  5. Java之实现多线程

    保证同步的几种方法: (1) 同步方法,synchronized 关键字修饰方法.由于Java中的每个对象都有一个内置锁,当用该关键词修饰时,内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则 ...

  6. CDH断电后 hbase出现spilt块不完整问题

    从错误看起来是regionspilt时候断电了,导致hbase master启动不起来,因为是测试环境只能删除这些region了,掉一部分数据 删除hbase下spilt块,删除zK里面的habse ...

  7. 【JZOJ3423】Vani和Cl2捉迷藏&【BZOJ1143】祭祀river

    description vani和cl2在一片树林里捉迷藏-- 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子 ...

  8. 拦截器和自定义注解@interface

    1 .拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在Handler执行之前或之后加入某些操作,其实就是AOP的一种实现策略. 拦截用户的请求并进行相应的处理,比如:判断用 ...

  9. DuiLib学习笔记3.颜色探究

    在前面两篇日志已经能使用xml了.今天准备好好的折腾一番,结果在颜色上却掉坑里了. 起初我在ps里取颜色为0104ff 这里01为R,04为G,ff为B 在控件的属性里有这样一个属性bkcolor=& ...

  10. lumen框架使用Elasticsearch详解

    该博文是集合几个博客踩坑得来的,百度热搜前几篇都是缺胳膊少腿的,所以结合几篇博客实现了一遍. 一.lumen使用Elasticsearch 首先需要搭建好的elasticsearch环境: http: ...