prototype和singleton有什么区别
spring中bean的不同scope 比如prototype和singleton有什么区别
1、singleton作用域
当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,
并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,
单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,
spring的IOC容器中只会存在一个该bean。
2、prototype
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,
将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,
任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。
(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)
scope="prototype"没写的问题,项目中对一个表的增删该操作是用一个action,这个actionadd,update,delete,save这些方法, 添加和修改是共用一个页面,
当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope=“prototype” 所以每次添加时都显示最后一次访问过的记录,
scope=“prototype” 会在该类型的对象被请求 时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,
他任然会保留上次访问的过记录的信息 webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。
所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=prototype”或singleton=”false”。
singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,假如这个类有成员变量,
那么这个成员变量的值是各个线程共享的,当线程A往给变量赋了一个值以后,线程B就能读出这个值。
因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,只要是带数据成员变量的类,
为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,就是因为他们没有用到数据成员变量,
如果谁的Service需要数据成员变量,设置singleton=false。 有状态的bean都使用Prototype作用域,而对无状态的bean则使用singleton作用域。
prototype和singleton有什么区别相关推荐
- Spring :singleton和protype区别
singleton和protype的区别: singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean ...
- 面试题大全1-javaSE部分-JavaEE框架中间件
文章目录 Java面试题大全 一.JavaSE 部分 基础部分 1.Java中基本数据类型有哪些? 2.Integer 和 int的区别 3.String和StringBuilder和StringBu ...
- 最全面java面试题集
一.JavaSE 部分 基础部分 Java中基本数据类型有哪些? byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间. short:16位, int:32位,最大数据存储容量 ...
- Java面试锦囊(五)
目录 介绍一下Spring 说下Spring框架的组成 什么是Spirng的IOC 你对AOP的理解 Spring的Bean懒加载和非懒加载有什么区别 Spring的依赖注入方式有哪些 说一下定义切面 ...
- 找工作再也不愁之面试题全覆盖-框架篇
二.JavaEE&框架&中间件 Spring部分 介绍一下Spring Spring是一个开源的轻量级控制反转和面向切面编程的容器框架.轻量级是说它开发使用简单,功能强大.控制反转是指 ...
- JavaEE框架中间件
Spring部分 介绍一下Spring Spring是一个开源的轻量级控制反转和面向切面编程的容器框架.轻量级是说它开发使用简单,功能强大.控制反转是指将对象的创建,销毁控制交给ioc容器,方便解耦合 ...
- java面试题大全必备神器
Java面试题大全 一.JavaSE 部分 基础部分 Java中基本数据类型有哪些? byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间. short:16位, int:32 ...
- spring 中scope的singleton和prototype区别
<bean id="meetAction" class="com.web.actions.MeetsAction" scope="proto ...
- Spring 循环引用 ——理解singleton与prototype初始化的区别
所谓的循环引用,就是A依赖B,B又依赖A,A与B两个对象相互持有.像下面这种情况: class A {B b;public A(B b) {this.b=b;} }class B {A a;publi ...
最新文章
- Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)
- python可以干嘛用-Python可以被用来做哪些神奇好玩的事情
- mysql dba系统学习(3)mysql的启动停止
- java的调试工具_2020年最佳Java调试工具(翻译)
- 最大字段和(动态规划,C语言)
- asp.net core 自定义 Content-Type
- vue.js 入门,简介
- 组合数学 —— 基本计数原理
- 记一次Git pull之后Permission denied的解决方案
- 用keepalived配置高可用,监控NGINX服务
- Weblogic ./startWebLogic.sh Error 解决
- 计算机辅助普通话水平测试指导,计算机辅助普通话水平测试指南38563
- 关于MySQL的wait_timeout连接超时问题报错解决方案
- nib、xib与故事板的关系
- python xml转excel_使用python脚本将XML 电子表格转变为Excel
- Win Server 2012 R2 安装SQL 2016先决条件
- swift5.0 代码实现跳转页面Segue (performSegue and prepare)
- 阿里云ECS主机绑定域名
- 2020数学建模C题摘要
- 质量功能展开(QFD)的基本原理
热门文章
- 微信扫码拉起小程序手机号授权跨端登录
- Mysql 自动递增(AUTO INCREMENT) 资料
- Domain Adaptive Object Detection for Autonomous Driving under FoggyWeather(翻)
- IntelliJ Idea整理Open Recent里面的项目列表
- 【el-table 边框颜色修改 实测有效!】
- 函数插值法实验报告c语言,插值法实验报告
- 老婆登机了_等待登机前检查您的飞行员
- log4j2史诗级漏洞攻击重现
- 中国对激光产品的检测认证要求
- Datawhale--组队学习第12期--python爬虫基础学习---Task02:bs4、xpath和正则表达式(2天)