在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. ReflectionUtil

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  2. netstat命令怎么查看端口是否占用

    转自:http://www.ahlinux.com/start/cmd/527.html netstat命令是一个监控TCP IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接 ...

  3. 爬虫(AJEX)——豆瓣动态页面

    工具:python3 解释:Ajax 是一种用于创建快速动态网页的技术,在无需重新加载整个网页的情况下,能够更新部分网页的技术. 目标:爬取使用Ajex结束的豆瓣网页 import urllib.re ...

  4. javascript模块化编程规范

    一.javascript模块化编程规范: 二.关于commenjs规范和AMD规范: 根本不同:前者用于服务器端同步加载模块:后者是客户端异步加载模块. 同点:两者都有一个全局函数require(), ...

  5. maven安装,使用说明,及maven Repository如何使用.

    maven的使用方法总结一下 1.首先去apache官网下载maven, http://maven.apache.org/download.cgi2.如果是windows系统,选择 apache-ma ...

  6. vnc安装问题

    在xenserver中安装vncserver软件.启动显示正常 用grep命令查看也确实有线程在运行. 但实际上用命令service vncserver status查看vnc状态,显示没有桌面在运行 ...

  7. SpringBoot2.0之三 优雅整合Spring Data JPA

      在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了"增删改查"的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的"增删改查"也是不 ...

  8. servlet传值到servlet传值问题

    今天在项目中遇到一个问题:中期项目自己做的新闻部分NewsPagerSortservlet传值时,正确答案如下 if(title!=""){ resp.sendRedirect(& ...

  9. SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!

    PID221 / 烦人的幻灯片 ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态         查看最后一次评测记录 质量还不能统计出来哦~ 题目评价 质量 无 ★★★★★ ★★★★☆ ★ ...

  10. Spring 的AOP

    AOP:面向切面编程,相对于OOP面向对象的编程 Spring的AOP的存在的目的是为了解耦.AOP可以让一组类共享相同的行为.在OOP中只能通过继承类和实现接口,来使代码的耦合度增强,且类继承只能为 ...