在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. 开元java开发工具

    开元java开发工具 http://www.hutool.cn/

  2. vue——做了一个幼稚的小页面

    我的小花花没有转起来,不开心  ̄へ ̄

  3. 使用tortoise git将一个现有项目推送到远程仓库

    一.安装文件: 1.git https://git-scm.com/downloads 2.tortoise git https://tortoisegit.org/download/ 二.将一个现有 ...

  4. SharePoint 2010开发方面的课堂中整理有关问题

    SharePoint 2010开发方面的课堂中整理有关问题 这是我这几天在做一个SharePoint开发的课程的时候,大家提出的一些问题,及我的解答,分享给更多的朋友参考一下 这个文档,也可以在这里下 ...

  5. jquery中的$(document).ready()

    window.onload = function(){ alert("welcome"); } 这样的写法作用是希望在页面加载完,自动执行定义js代码(function). $(d ...

  6. FusionCharts使用JavaScript渲染图表(不用Flash)

    FusionCharts可以让用户只使用JavaScript建立图表(而不是使用Flash),只需要添加另一行代码,如下所示: FusionCharts.setCurrentRenderer('jav ...

  7. SpringBoot的优缺点

    优点: 1.快速构建项目 2.对主流开发框架的无配置继承 3.项目可独立运行,无须外部依赖Servlet容器 4.提高运行时的应用监控 5.极大地提高了开发.部署效率 6.与云计算的天然集成 缺点: ...

  8. WPF学习二:TextBlock和Label的区别

    TextBlock和Label都是用来显示少量数据的.好多文章对Label存在的描述都是它允许使用"快速获取"."快速获取"就是允许你用Alt加上其它的按键快速 ...

  9. use scanner/smb/smb_version

    use scanner/smb/smb_version msf auxiliary(smb_version) > set RHOSTS 172.16.21.170RHOSTS => 172 ...

  10. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...