在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     

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

  这里通过property对类中的属性进行赋值可参考:https://blog.csdn.net/qq_21396469/article/details/63684769

编写测试类:

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

Spring中的单例模式和多例模式的应用的更多相关文章

  1. Spring中的单例模式

    Spring中的单例模式 单例模式的介绍 1.1 简介 ​ 保证整个应用中某个实例有且只有一个 1.2作用 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 单例模式的优点和缺点 单例模式的优 ...

  2. java单例模式和双例模式

    今天朋友找我给做道题,双例模式,我是没听说过,都说是单例模式和多例模式, 也不知道双例模式什么时候用,就简单写了一个案例,不知道对不对,个人感觉蛮对的,双例就是单例+单例,废话不说了!!!! /* * ...

  3. Spring学习之路——单例模式和多例模式

    在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例) singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实 ...

  4. Spring 单例模式和多例模式

    1.Spring中的对象默认都是 单例模式. 2.使用 @Scope("prototype") 注解来使对象成为多例模式. 3.通过@Autowired 注入的Service 或者 ...

  5. Spring中的设计模式:工厂方法模式

    导读 工厂方法模式是所有设计模式中比较常用的一种模式,但是真正能搞懂用好的少之又少,Spring底层大量的使用该设计模式来进行封装,以致开发者阅读源代码的时候晕头转向. 文章首发于微信公众号[码猿技术 ...

  6. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  7. spring中的定时任务调度用例

    在application-quartz.xml配置文件中添加如下配置信息: <!-- Quartz -->     <bean id="getSendEmailObject ...

  8. Spring中常用的23中设计模式

    1.spring 中常用的设计模式有23中  分类  设计模式  创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...

  9. 在商城系统中使用设计模式----策略模式之在spring中使用策略模式

    1.前言: 这是策略模式在spring中的使用,对策略模式不了解对同学可以移步在商城中简单对使用策略模式. 2.问题: 在策略模式中,我们创建表示各种策略的对象和一个行为,随着策略对象改变而改变的 c ...

随机推荐

  1. Testlink安装配置时常见问题解决

    1.windows下安装testlink,进入安装页面后,在检查一些相关配置环境时报错,如下: Checking if /var/testlink/logs/ directory exists [S] ...

  2. (转) Linux命令学习手册-arp命令

    arp 原文:http://blog.chinaunix.net/uid-9525959-id-3318814.html [功能] 管理系统的arp缓存. [描述] 用来管理系统的arp缓存,常用的命 ...

  3. The program 'unzip' is currently not installed. You can install it by typing:

    linux解压遇到下面问题: The program 'unzip' is currently not installed. You can install it by typing: sudo ap ...

  4. Web 前端安装依赖的时候遇到的问题

  5. qrcode.js的识别解析二维码图片和生成二维码图片

    qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c ...

  6. 解决移动端浏览器页面 X轴横向滚动条问题

    写web端页面的时候,总是会出现横向滚动条,即 X 轴滚动条,导致页面左右滑来滑去. 即使设置了 body,html {overflow-x:hidden;width:100%;} 也无法生效. 解决 ...

  7. 零基础逆向工程28_Win32_02_事件_消息_消息处理函数

    1 第一个图形界面程序 步骤1:创建Windows应用程序 选择空项目 步骤2:在新建项窗口中选C++代码文件 创建一个新的cpp文件 步骤3:在新的cpp文件中添加:#include <Win ...

  8. <Android 基础(三)> MVP模式

    前言 MVP,这里指的并不是篮球比赛中的MVP(最有价值球员),而是一种代码框架和设计思想,它是由MVC演变而来的. MVP模式(Model-View-Presenter) 是MVC模式的一个衍生.主 ...

  9. .gitignore梳理

    参考来源: https://www.cnblogs.com/kevingrace/p/5690241.html 对于经常使用Git的朋友来说,.gitignore配置一定不会陌生.废话不说多了,接下来 ...

  10. centos7 初体验

    centos7 https://linux.cn/tag-RHCSA%7CRHCSA.html #/etc/sysconfig/network NETWORKING=yes GATEWAY=192.1 ...