• 0
  • 0
分享
  • Spring中的单例模式和多例模式的应用——软件测试圈
  • TIMI 2022-02-23 11:40:27 字数 2051 阅读 506 收藏 0

在Spring的配置中,Bean的scope属性中存在两种模式:singleton(单例模式)、prototype(多例模式)

singleton 单例模式:对象在整个系统中只有一份,所有的请求都用一个对象来处理,如service和dao层的对象一般是单例的。

为什么使用单例:因为没有必要每个请求都新建一个对象的时候,因为这样会浪费CPU和内存。

prototype 多例模式:对象在整个系统中可以有多个实例,每个请求用一个新的对象来处理,如action。

为什么使用多例:防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象的状态改变导致了对象对另一个请求做了错误的处理;

实例:

class User{
    private int id;
    private String name;
    private List<String> hobby;
    public void init(){
        System.out.println("初始化方法!");
    }
    public void distroy(){
        System.out.println("销毁方法!");
    }
        ......get and set方法
}

 接下来在applicationContext.xml中配置Spring,配置User的Bean

<Bean id="user" name="user" class="User" scope="singleton" init-methon="init" distroy-methon="distroy">
    <property name="id" value="1"></property>
    <property name="name" value="张三"></property>
    <property name="hobby">
        <list>
            <value>打篮球</value>
            <value>听歌</value>
        </list>
    </property>
</Bean>

Bean:该对象需要Spring来管理,将User对象交给Spring管理

id 和 name:做用是一样的,给Bean取一个名字,可以通过这个名字获取到这个对象。使用name的话不能使用特殊字符,尽量使用id。

class:完整的类名。也就是Bean对象所对应的类对象。
scope:singleto 或者prototype。
init-methon:初始化方法
distroy-methon:销毁方法

property:通过name给类中的属性赋值value。

如果这里name的类型为其它bean对象的映射可以写成

<property name="user">
    <ref bean="user1"></ref>    //这里是映射的bean的id或name为user1的bean
</property>

如果这里name的类型为集合类型,可以通过以上list例子对其进行赋值

类型为list和set,只需要将标签对改成对应的集合类型就可以。

果类型为map     

1 <map>
2     <entry key="A" value-ref="user1"></entry>    //key为键,value-ref为bean的映射
3 </map>

编写测试类:

import org.junit.Test;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class Demo {  
    @Test  
    public void test(){  
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");  
        User user = (User) ac.getBean("user");  
        User user1 = (User) ac.getBean("user");  
       System.out.println(user);
       System.out.println(user1);
    }
}

单例模式运行的结果:

初始化方法
User@60c7531f
User@60c7531f

多例模式运行的结果:

将scope改为prototype

初始化方法
初始化方法
User@5891e34
User@cb0ed20


作者:EmilZs丶

原文链接:https://www.cnblogs.com/EmilZs/p/9342344.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、个人的基本信息,扬长避短1、年纪太大与太小,都不需要主动去说明。比如我年纪只有21岁例子:面试官您好,我叫***,来自于哪里,从事软件测试工作有几年了。2、专业不对口也不要过多的去提及(提到了就会增加问你的概率)。比如你的专业是机械专业例子:面试官您好,我叫***,来自于哪里,从事软件测试工作有几年了。比如你的专业是计算机专业例子:面试官您好,我叫***,来自于哪里,计算机专业毕业后,从事软件测试工作有几年了。二、突出自己的工作经验自己的项目经验(重点突出跟你面试公司相关或者同类型的项目)。比如公司从事的主要是web项目:以前主要是从事web系统的项目,做过不少的项目,也积累了不少的测试经...
            15 13 2611
            分享
          • 1 引言执行测试时离不开测试用例,测试用例辅佐执行测试,这就好比皇帝与宰相,需要的是相辅相成。既然相辅相成,那是不是就可以高枕无忧了?其则不然,任何事情都会有出错的可能,所以,测试用例也不列为。我们今天来看看,测试用例是如何出错。2 何为资源泄露2.1 资源泄露定义1、什么是资源泄露:资源泄露是指程序在使用完自己获取的资源之后,没有及时释放。资源泄露可能导致系统资源耗尽,造成程序不稳定甚至崩溃。2、举例:内存是一种资源,内存泄露bug,常常是造成程序out of memory的罪恶魁首。2.2 TestCase 中资源泄露1、TestCase的稳定性自动化测试的稳定性由多方面决定,包括被测软件...
            1 0 31367
            分享
          • 比较测试将产品与之前版本或其他类似产品的优缺点进行比较称为比较测试。等价划分它是一种测试技术,也是黑盒测试的一种。在此 等价分区期间,会选择一组组并选取一些值或数字进行测试。可以理解,来自该组的所有值都生成相同的输出。此测试的目的是删除特定组中产生相同输出但没有任何缺陷的冗余测试用例。假设应用程序接受 -10 和 +10 之间的值,然后使用等价分区,选择用于测试的值是零、一个正值和一个负值。因此,此测试的等效分区是 -10 到 -1、0 和 1 到 10。示例测试示例测试是实时测试。它包括实时场景和基于测试人员经验的场景。这种类型的测试也被称为基于经验的测试,因为它使用测试人员对应用...
            0 0 773
            分享
          • 一、我们为什么要做日志测试?虽然额外的日志记录可能会导致软件程序的执行速度下降。但如果有详细的日志记录就可以帮助我们更迅速地诊断问题,加快我们对故障的响应,并且往往可以显著地减少发现一些隐藏得非常深的错误的问题!二、日志级别log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL 最低等级的,用于打开所有日志记录。TRACE designates finer-grained informational events than the DEBUG.Since:1....
            0 0 672
            分享
          •       了解一项技术的有效途径是阅读官网文献,TestNG是应用非常广泛的自动化测试框架,稍有基础的同学都能够很容易上手TestNG。但在简单实用的背后,TestNG蕴藏着更为强大的功能和设计技巧。本系列通过对官网文献的阅读和大家一同探秘TestNG。写在引言的前面     使用TestNG很长时间了,相比JUnit,TestNG上手更容易,配置更灵活,功能更强大。出于项目的需要,使用的时候功利性太强,总是遇到拿起来就用,遇到问题再各种查资料解决,缺少系统的总结。现在通过TestNG官网文章的阅读进行系统的学习,主要是对TestN...
            2 3 2385
            分享
      • 51testing软件测试圈微信