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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   与英伟达和 AMD 等竞争对手不同,英特尔在人工智能产品方面除了推出一些带有 NPU 的笔记本电脑芯片外,并没有掀起巨大的波澜。这也间接导致,目前英特尔市值只有 AMD 不到一半水平,甚至不到英伟达 3.35%。  据路透社报道,英特尔七年前曾有机会以 10 亿美元(IT之家备注:当前约 71.54 亿元人民币)现金收购 OpenAI 约 15% 的股份。那时候,OpenAI 还只是一个刚刚起步的非营利性研究机构,致力于生成人工智能这个鲜为人知的领域。  知情人士透露,2017 年和 2018 年的几个月里,两家公司的高管讨论了各种可能,例如以 10 亿美元购买公司 15% 的股份,或入股...
            0 0 473
            分享
          •   前言  无论什么自动化,都会需要参数化。unittest可以通过ddt来完成参数化,那么pytest通过什么呢?  parametrize  pytest中自带的装饰器parametrize可以来实现测试用例的参数化功能。  使用方法  通过下方装饰器,使用在需要传入参数的case中。用例传参中的值和装饰器传入的参数值一致。@pytest.mark.parametrize('参数化名称',参数化值)  安静举一个登录传参的例子。import pytest # 登录参数 data = [('anjing', &...
            13 15 2984
            分享
          • 1、什么是自动化测试?自动化的重点是用能提高效率的系统或设备代替人工活动。自动化测试是一种使用各种类型的软件工具或脚本来执行测试任务的技术,例如输入数据,执行测试步骤以及比较结果等。2、有哪些不同类型的自动化测试?自动化的测试类型有单元测试,GUI测试和功能测试。单元测试通常在开发阶段完成,以减少错误GUI测试是在测试级别完成的,其中编写了测试脚本以测试应用程序的用户界面的行为。功能测试也在测试级别上完成,以模拟功能场景,以使用提供的输入和预期的输出来测试应用程序。3、什么是自动化测试脚本?自动化测试脚本基本上是一个简短的程序,用一种编程语言编写,可以在应用程序上执行一组指令。这样做是为了验证...
            0 0 974
            分享
          •   最近在利用JMeter做接口自动化测试工作,实现了很多场景的自动化,想着很多方法具有通用性,于是拿出来分享下,希望对大家有所启发。  今天分享的是场景是:JMeter进行接口测试,两种方法获取登录接口的Cookie值。  HTTPCookie管理器  在JMeter中,HTTPCookie管理器(HTTPCookieManager)用于管理发送和接收的HTTP请求中的Cookie。Cookie是服务器用来在客户端和服务器之间维持会话状态的一种机制,通过在请求和响应中传递Cookie来实现状态的保持。  这次分享的案例就是,在登录后,通过使用HTTPCookie管理器,可以自动处理和发送服务...
            0 0 1571
            分享
          •  前言一大早测试部的老大就召集我们开了个会——原因是我们组负责的业务除了个线上漏测,用户的投诉跟雪花似的纷至杳来。公司门口那个巨大的显示屏就在那轮播着用户反馈,好几屏都是用户在吐槽这个bug。没啥可说的,该背的锅还是要背的,那个漏测也不算冤,测试同事造不出那个异常场景,心中侥幸,觉得不至于异常会导致客户端出现啥问题。偏偏它就出了问题!后来组里开会复盘了下,决定以后在测试环节里引入mock测试工具协助测试。主要为了解决我们测试过程中遇到的以下问题:代码存在多个接口依赖的问题,造出测试场景费时费力,且有时由于代码设计和业务隔离的问题无法造出来涉及到外部第三方资源,无法调试外部代码内部情况...
            8 8 697
            分享
      • 51testing软件测试圈微信