• 装配SpringBean(三)--XML方式实例


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

    上图是我画的一个基本结构,可以看出该类中有基本类型变量、引用变量、属性变量、集合变量且集合元素有基本类型和引用类型,我的引用类型中所有变量使用基本类型,所以先来创建两个引用类型CoderCard和CoderProject。

    一、装配bean

    1⃣️创建CoderCard.java

     1 public class CoderCard {
     2     private String id;
     3     private String cardNotes;
     4     private String coderId;
     5 
     6     public String getId() {
     7         return id;
     8     }
     9 
    10     public void setId(String id) {
    11         this.id = id == null ? null : id.trim();
    12     }
    13 
    14     public String getCardNotes() {
    15         return cardNotes;
    16     }
    17 
    18     public void setCardNotes(String cardNotes) {
    19         this.cardNotes = cardNotes == null ? null : cardNotes.trim();
    20     }
    21 
    22     public String getCoderId() {
    23         return coderId;
    24     }
    25 
    26     public void setCoderId(String coderId) {
    27         this.coderId = coderId == null ? null : coderId.trim();
    28     }
    29 }

    2⃣️创建CoderProject.java

     1 public class CoderProject {
     2     private String id;
     3     private String projectName;
     4     private String projectVersion;
     5     private String projectDesc;
     6 
     7     public String getId() {
     8         return id;
     9     }
    10 
    11     public void setId(String id) {
    12         this.id = id == null ? null : id.trim();
    13     }
    14 
    15     public String getProjectName() {
    16         return projectName;
    17     }
    18 
    19     public void setProjectName(String projectName) {
    20         this.projectName = projectName == null ? null : projectName.trim();
    21     }
    22 
    23     public String getProjectVersion() {
    24         return projectVersion;
    25     }
    26 
    27     public void setProjectVersion(String projectVersion) {
    28         this.projectVersion = projectVersion == null ? null : projectVersion.trim();
    29     }
    30 
    31     public String getProjectDesc() {
    32         return projectDesc;
    33     }
    34 
    35     public void setProjectDesc(String projectDesc) {
    36         this.projectDesc = projectDesc == null ? null : projectDesc.trim();
    37     }
    38 }

    3⃣️创建Coder.java

      1 public class Coder {
      2     private String id;
      3     private String coderName;
      4     private Integer coderAge;
      5     private Integer coderSalary;
      6         private CoderCard coderCard;
      7         private Properties prop;
      8 
      9     // 集合元素是基本类型
     10     private List<String> coderBugList;
     11 
     12     private Map<String, String> coderBugMap;
     13 
     14     private Set<String> coderBugSet;
     15 
     16     private String[] coderBugArray;
     17 
     18     // 集合元素是引用类型
     19     private List<CoderProject> coderProjectList;
     20 
     21     private Map<CoderCard, CoderProject> coderProjectMap;
     22 
     23     private Set<CoderProject> coderProjectSet;
     24 
     25     private CoderProject[] coderProjectArray;
     26 
     27     public String getId() {
     28         return id;
     29     }
     30 
     31     public void setId(String id) {
     32         this.id = id == null ? null : id.trim();
     33     }
     34 
     35     public String getCoderName() {
     36         return coderName;
     37     }
     38 
     39     public void setCoderName(String coderName) {
     40         this.coderName = coderName == null ? null : coderName.trim();
     41     }
     42 
     43     public Integer getCoderAge() {
     44         return coderAge;
     45     }
     46 
     47     public void setCoderAge(Integer coderAge) {
     48         this.coderAge = coderAge;
     49     }
     50 
     51     public Integer getCoderSalary() {
     52         return coderSalary;
     53     }
     54 
     55     public void setCoderSalary(Integer coderSalary) {
     56         this.coderSalary = coderSalary;
     57     }
     58 
     59     public CoderCard getCoderCard() {
     60         return coderCard;
     61     }
     62 
     63     public void setCoderCard(CoderCard coderCard) {
     64         this.coderCard = coderCard;
     65     }
     66 
     67     public List<String> getCoderBugList() {
     68         return coderBugList;
     69     }
     70 
     71     public void setCoderBugList(List<String> coderBugList) {
     72         this.coderBugList = coderBugList;
     73     }
     74 
     75     public Map<String, String> getCoderBugMap() {
     76         return coderBugMap;
     77     }
     78 
     79     public void setCoderBugMap(Map<String, String> coderBugMap) {
     80         this.coderBugMap = coderBugMap;
     81     }
     82 
     83     public Set<String> getCoderBugSet() {
     84         return coderBugSet;
     85     }
     86 
     87     public void setCoderBugSet(Set<String> coderBugSet) {
     88         this.coderBugSet = coderBugSet;
     89     }
     90 
     91     public Properties getProp() {
     92         return prop;
     93     }
     94 
     95     public void setProp(Properties prop) {
     96         this.prop = prop;
     97     }
     98 
     99     public String[] getCoderBugArray() {
    100         return coderBugArray;
    101     }
    102 
    103     public void setCoderBugArray(String[] coderBugArray) {
    104         this.coderBugArray = coderBugArray;
    105     }
    106 
    107     public List<CoderProject> getCoderProjectList() {
    108         return coderProjectList;
    109     }
    110 
    111     public void setCoderProjectList(List<CoderProject> coderProjectList) {
    112         this.coderProjectList = coderProjectList;
    113     }
    114 
    115     public Map<CoderCard, CoderProject> getCoderProjectMap() {
    116         return coderProjectMap;
    117     }
    118 
    119     public void setCoderProjectMap(Map<CoderCard, CoderProject> coderProjectMap) {
    120         this.coderProjectMap = coderProjectMap;
    121     }
    122 
    123     public Set<CoderProject> getCoderProjectSet() {
    124         return coderProjectSet;
    125     }
    126 
    127     public void setCoderProjectSet(Set<CoderProject> coderProjectSet) {
    128         this.coderProjectSet = coderProjectSet;
    129     }
    130 
    131     public CoderProject[] getCoderProjectArray() {
    132         return coderProjectArray;
    133     }
    134 
    135     public void setCoderProjectArray(CoderProject[] coderProjectArray) {
    136         this.coderProjectArray = coderProjectArray;
    137     }
    138 
    139 }

    4⃣️XML中进行装配:spring-bean.xml

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <beans xmlns="http://www.springframework.org/schema/beans"
      3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4     xsi:schemaLocation="http://www.springframework.org/schema/beans
      5         http://www.springframework.org/schema/beans/spring-beans.xsd">
      6 
      7 
      8     <bean id="coder" class="com.hyc.pojo.Coder">
      9         <!-- 装配简易值 -->
     10         <property name="id" value="1"></property>
     11         <property name="coderName" value="张三"></property>
     12         <property name="coderAge" value="26"></property>
     13         <property name="coderSalary" value="10000"></property>
     14         <!--装配对象 -->
     15         <property name="coderCard" ref="coderCard"></property>
     16         <!-- 装配Properties -->
     17         <property name="prop">
     18             <props>
     19                 <prop key="bug-key-1">bug-prop-1</prop>
     20                 <prop key="bug-key-2">bug-prop-2</prop>
     21                 <prop key="bug-key-3">bug-prop-3</prop>
     22             </props>
     23         </property>
     24         <!-- 装配集合,集合元素是基本类型 -->
     25         <!-- 基本类型-装配List -->
     26         <property name="coderBugList">
     27             <list>
     28                 <value>bug-list-1</value>
     29                 <value>bug-list-2</value>
     30                 <value>bug-list-3</value>
     31             </list>
     32         </property>
     33         <!-- 基本类型-装配Map -->
     34         <property name="coderBugMap">
     35             <map>
     36                 <entry key="bug1" value="bug-map-1" />
     37                 <entry key="bug2" value="bug-map-2" />
     38                 <entry key="bug3" value="bug-map-3" />
     39             </map>
     40         </property>
     41         <!-- 基本类型-装配Set -->
     42         <property name="coderBugSet">
     43             <set>
     44                 <value>bug-set-1</value>
     45                 <value>bug-set-2</value>
     46                 <value>bug-set-3</value>
     47             </set>
     48         </property>
     49         <!-- 基本类型-装配Array -->
     50         <property name="coderBugArray">
     51             <array>
     52                 <value>bug-array-1</value>
     53                 <value>bug-array-2</value>
     54                 <value>bug-array-3</value>
     55             </array>
     56         </property>
     57 
     58         <!-- 装配集合,集合元素是引用类型 -->
     59         <!-- 引用类型-装配List -->
     60         <property name="coderProjectList">
     61             <list>
     62                 <ref bean="coderProject1" />
     63                 <ref bean="coderProject2" />
     64             </list>
     65         </property>
     66         <!-- 引用类型-装配Map -->
     67         <property name="coderProjectMap">
     68             <map>
     69                 <entry key-ref="coderCard1" value-ref="coderProject1" />
     70                 <entry key-ref="coderCard2" value-ref="coderProject2" />
     71             </map>
     72         </property>
     73         <!-- 引用类型-装配Set -->
     74         <property name="coderProjectSet">
     75             <set>
     76                 <ref bean="coderProject1" />
     77                 <ref bean="coderProject2" />
     78             </set>
     79         </property>
     80         <!-- 引用类型-装配Array -->
     81         <property name="coderProjectArray">
     82             <array>
     83                 <ref bean="coderProject1" />
     84                 <ref bean="coderProject2" />
     85             </array>
     86         </property>
     87     </bean>
     88 
     89     <!-- 对象作为成员变量 -->
     90     <bean id="coderCard" class="com.hyc.pojo.CoderCard">
     91         <property name="id" value="1"></property>
     92         <property name="cardNotes" value="张三的工牌"></property>
     93         <property name="coderId" value="1"></property>
     94     </bean>
     95     <!-- 对象作为成员变量 -->
     96     <bean id="coderCard1" class="com.hyc.pojo.CoderCard">
     97         <property name="id" value="2"></property>
     98         <property name="cardNotes" value="李四的工牌"></property>
     99         <property name="coderId" value="2"></property>
    100     </bean>
    101 
    102     <bean id="coderCard2" class="com.hyc.pojo.CoderCard">
    103         <property name="id" value="3"></property>
    104         <property name="cardNotes" value="王麻子的工牌"></property>
    105         <property name="coderId" value="3"></property>
    106     </bean>
    107 
    108     <bean id="coderProject1" class="com.hyc.pojo.CoderProject">
    109         <property name="id" value="1"></property>
    110         <property name="projectName" value="管理系统"></property>
    111         <property name="projectVersion" value="V1.0"></property>
    112         <property name="projectDesc" value="管理配置"></property>
    113     </bean>
    114     <bean id="coderProject2" class="com.hyc.pojo.CoderProject">
    115         <property name="id" value="2"></property>
    116         <property name="projectName" value="存储系统"></property>
    117         <property name="projectVersion" value="V1.0"></property>
    118         <property name="projectDesc" value="存储配置"></property>
    119     </bean>
    120 
    121 </beans>

    二、测试装配结果

    1⃣️编写测试方法

    因为我测试使用的是junit单元测试,所以先来编写一个单元测试积基类,完成ClassPathXmlApplicationContext类的实例化等操作;

    第一步:创建单元测试基类

     1 package com.test.xml;
     2 
     3 import org.junit.After;
     4 import org.junit.Before;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 /**
     8  * Unit test for simple App.
     9  */
    10 public class BaseTest {
    11 
    12     public String xmlPath;
    13     public ClassPathXmlApplicationContext context;
    14 
    15     public BaseTest(String xmlPath) {
    16         this.xmlPath = xmlPath;
    17     }
    18 
    19     @Before
    20     public void before() {
    21         if (xmlPath.isEmpty()) {
    22             xmlPath = "classpath*:spring-*.xml";
    23         }
    24         context = new ClassPathXmlApplicationContext(xmlPath.split("[,\s]"));
    25         context.start();
    26     }
    27 
    28     @SuppressWarnings("deprecation")
    29     @After
    30     public void after() {
    31         context.destroy();
    32     }
    33 
    34 }

    第二步:创建bean装配的测试类,编写测试方法

     1 package com.test.xml;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 import java.util.Properties;
     6 import java.util.Set;
     7 
     8 import org.junit.Test;
     9 
    10 import com.hyc.controller.CoderController;
    11 import com.hyc.pojo.Coder;
    12 import com.hyc.pojo.CoderCard;
    13 import com.hyc.pojo.CoderProject;
    14 
    15 /*
    16  * 各种数据类型装载测试(XML方式)
    17  */
    18 public class SpringBeanTest extends BaseTest {
    19     public SpringBeanTest() {
    20         super("classpath*:spring-bean.xml");
    21     }
    22 
    23     /**
    24      * 基本数据类型装配测试
    25      */
    26     @Test
    27     public void testBaseBean() {
    28         Coder coder = (Coder) super.context.getBean("coder");
    29         String name = coder.getCoderName();
    30         System.out.println("name:" + name);
    31         int age = coder.getCoderAge();
    32         System.out.println("age:" + age);
    33         int salary = coder.getCoderSalary();
    34         System.out.println("salary:" + salary);
    35         String cardNotes = coder.getCoderCard().getCardNotes();
    36         System.out.println("cardNotes:" + cardNotes);
    37         Properties props = coder.getProp();
    38         System.out.println("props:" + props.getProperty("bug-key-1"));
    39     }
    40 
    41     /**
    42      * 装配集合类型,集合元素是基本数据类型
    43      */
    44     @Test
    45     public void testBaseCollection() {
    46         Coder coder = (Coder) super.context.getBean("coder");
    47         List<String> bugList = coder.getCoderBugList();
    48         System.out.println("bugList:" + bugList.size());
    49         Map<String, String> bugMap = coder.getCoderBugMap();
    50         System.out.println("bugMap:" + bugMap.size());
    51         String[] bugArray = coder.getCoderBugArray();
    52         System.out.println("bugArray:" + bugArray.length);
    53         Set<String> bugSet = coder.getCoderBugSet();
    54         System.out.println("bugSet:" + bugSet.size());
    55     }
    56 
    57     /**
    58      * 装配集合类型,集合元素是引用类型
    59      */
    60     @Test
    61     public void testRefCollection() {
    62         Coder coder = (Coder) super.context.getBean("coder");
    63         List<CoderProject> projectList = coder.getCoderProjectList();
    64         System.out.println("projectList:" + projectList.size());
    65         Map<CoderCard, CoderProject> projectMap = coder.getCoderProjectMap();
    66         System.out.println("projectMap:" + projectMap.size());
    67         CoderProject[] projectArray = coder.getCoderProjectArray();
    68         System.out.println("projectArray:" + projectArray.length);
    69         Set<CoderProject> projectSet = coder.getCoderProjectSet();
    70         System.out.println("projectSet:" + projectSet.size());
    71     }
    72 
    73 }

    以上就是测试代码:

    第一个方法是测试基本类型、引用类型和Properties类型;

    第二个方法是测试集合类型,集合元素是基本类型;

    第三个方法是测试集合类型,集合元素是引用类型;

    测试时只要选中方法名,右击-Run As-Junit Test即可,如果要同时测试所有的方法,直接在该类中右击-Run As-Junit Test就行。测试集合的时候我只是输出了集合的size

    2⃣️查看测试结果

    以上就是通过XML装配bean的完整实例,其实这种方式是比较简单的,缺点是需要配置很多内容,为了解决这一缺陷,spring又提供了另外一种注解的方式,下一篇文章我将进行总结。

  • 相关阅读:
    网络安全之数字签名
    python爬取并分析淘宝商品信息
    循环与分支——python
    线性相关与线性无关
    linux之文件传输协议(FTP)与本地用户测试
    递归下降语法分析
    MySQL:索引
    一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
    Tomcat的部署、虚拟主机及优化
    二叉树深度
  • 原文地址:https://www.cnblogs.com/hellowhy/p/9712630.html
Copyright © 2020-2023  润新知