Spring :singleton和protype区别
singleton和protype的区别:
singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的请求,只要id与该Bean定义相匹配,则只会返回该Bean的同一实例。值得强调的是singleton作用域是Spring中的缺省作用域。
prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean
()方法)时都会创建一个新的Bean实例。根据经验,对有状态的Bean应使用prototype作用域,而对无状态的Bean则应该使用singleton作用域。
对于具有prototype作用域的Bean,有一点很重要,即Spring不能对该Bean的整个生命周期负责。具有prototype作用域的Bean创建后交由调
用者负责销毁对象回收资源。
简单的说:
singleton 只有一个实例,也即是单例模式。
prototype访问一次创建一个实例,相当于new。
应用场合:
1.需要回收重要资源(数据库连接等)的事宜配置为singleton,如果配置为prototype需要应用确保资源正常回收。
2.有状态的Bean配置成singleton会引发未知问题,可以考虑配置为prototype。
默 认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: spring容器只存在一个共享的bean实例,默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用 singleton作用域。在Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为 request、session和 global session。如果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外 的初始化配置。即在web应用的web.xml中增加这么一个 ContextListener:org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域!
singleton 是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的如果你的类是没有状态的, 那用singleton 的性能要高一些 ,因为只有一个实例。如果你的类是有状态的 ,那就必须显示的设置为prototype了在ssh2 项目中,struts2的action交由spring管理的时候,spring默认是singleton的,而struts2的action显然是有状 态的,所以必须显示设置为scope="prototype",prototype为原型模式,每次action请求过来都会创建一个action但是对 那些Dao的实现类推介scope="singleton" ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些
spring Bean的作用域:
scope=singleton(默认,单例,生成一个实例) 不是线程安全,性能高
scope=prototype(多线程, 生成多个实例)
Spring :singleton和protype区别相关推荐
- prototype和singleton有什么区别
spring中bean的不同scope 比如prototype和singleton有什么区别 1.singleton作用域 当一个bean的作用域设置为singleton, 那么Spring IOC容 ...
- Spring Singleton,请求,会话Bean和线程安全
由众多有用框架组成的Spring框架生态系统已成为许多Java EE应用程序的基础. 但是在所有Spring产品的核心中,我们仍然拥有Spring DI / IOC框架,该框架将Spring推向了新的 ...
- Spring与SpringMVC的区别
Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话可以将SpringMVC类比于Strut ...
- spring boot 外部配置文件1-spring.config.location与spring.config.additional-location的区别
spring boot外部配置文件 基础环境 : 基础环境 版本 spring boot 2.7.0 JDK 8 测试代码: @SpringBootApplication public class D ...
- springmvc和php,spring和springmvc的区别
Spring与SpringMVC的区别 Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话 ...
- spring.profiles.include 跟 spring.profiles.active 的区别
spring.profiles.include 跟 spring.profiles.active 的区别 背景 我们经常看到springboot的 spring.profiles.active,有时也 ...
- mysql与spring隔离级别不同_mysql事务隔离级别与spring事务隔离级别的区别
mysql事务隔离级别与spring事务隔离级别的区别: 脏读:为什么会出现脏读,因为你对数据库的任何修改都会是立即生效的,至于别人能不能看到主要取决与你 是否加锁了,数据库的执行与事务没有关系,事务 ...
- 面试官:spring boot和spring究竟有啥区别?
面试官:spring boot和spring究竟有啥区别? 前言 今天本篇文章主要聚焦说说,spring boot和spring究竟有啥区别,重点对比MVC模块以及Security模块在两大框架使用时 ...
- Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666
Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666 作为初级程序员,这样的问题在面试中,也被问到过,随着越来越了解,发现以前自己答的真水. 一般的回答 先来说说我以 ...
最新文章
- 顺序表-元素逆置(首尾交换)
- Html5 学习系列(一)认识HTML5
- JAVA程序禁用Hbase中的表_HBase禁用表
- hard sampling
- 2015_6_16-开博第一天
- 小程序如何实现tab切换,一部到位
- 可有可无的Mysql工作技巧
- 【华为云技术分享】云小课 | SAP容灾一点通
- Exchange 日志/存储路径
- Redis配置文件详解(redis.conf)
- 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
- 线索二叉树 - 数据结构和算法48
- 网易云会员音乐NCM格式在线转为MP3格式
- 关于什么是AndroidX(一)
- Vue3 Extraneous non-props attributes (id) were passed to component but could not be automatically
- Flutter isolate使用
- 【系统分析师之路】第十六章 复盘计算机网络(新技术领域)
- NVIDIA TensorRT (python win10)安装成功分享
- 创业板公司相符如何经济转型
- jsp html实现旅游网站,基于JSP实现的旅游网站