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有什么区别相关推荐

  1. Spring :singleton和protype区别

    singleton和protype的区别: singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean ...

  2. 面试题大全1-javaSE部分-JavaEE框架中间件

    文章目录 Java面试题大全 一.JavaSE 部分 基础部分 1.Java中基本数据类型有哪些? 2.Integer 和 int的区别 3.String和StringBuilder和StringBu ...

  3. 最全面java面试题集

    一.JavaSE 部分 基础部分 Java中基本数据类型有哪些? byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间. short:16位, int:32位,最大数据存储容量 ...

  4. Java面试锦囊(五)

    目录 介绍一下Spring 说下Spring框架的组成 什么是Spirng的IOC 你对AOP的理解 Spring的Bean懒加载和非懒加载有什么区别 Spring的依赖注入方式有哪些 说一下定义切面 ...

  5. 找工作再也不愁之面试题全覆盖-框架篇

    二.JavaEE&框架&中间件 Spring部分 介绍一下Spring Spring是一个开源的轻量级控制反转和面向切面编程的容器框架.轻量级是说它开发使用简单,功能强大.控制反转是指 ...

  6. JavaEE框架中间件

    Spring部分 介绍一下Spring Spring是一个开源的轻量级控制反转和面向切面编程的容器框架.轻量级是说它开发使用简单,功能强大.控制反转是指将对象的创建,销毁控制交给ioc容器,方便解耦合 ...

  7. java面试题大全必备神器

    Java面试题大全 一.JavaSE 部分 基础部分 Java中基本数据类型有哪些? byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间. short:16位, int:32 ...

  8. spring 中scope的singleton和prototype区别

    <bean id="meetAction" class="com.web.actions.MeetsAction"   scope="proto ...

  9. 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 ...

最新文章

  1. Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)
  2. python可以干嘛用-Python可以被用来做哪些神奇好玩的事情
  3. mysql dba系统学习(3)mysql的启动停止
  4. java的调试工具_2020年最佳Java调试工具(翻译)
  5. 最大字段和(动态规划,C语言)
  6. asp.net core 自定义 Content-Type
  7. vue.js 入门,简介
  8. 组合数学 —— 基本计数原理
  9. 记一次Git pull之后Permission denied的解决方案
  10. 用keepalived配置高可用,监控NGINX服务
  11. Weblogic ./startWebLogic.sh Error 解决
  12. 计算机辅助普通话水平测试指导,计算机辅助普通话水平测试指南38563
  13. 关于MySQL的wait_timeout连接超时问题报错解决方案
  14. nib、xib与故事板的关系
  15. python xml转excel_使用python脚本将XML 电子表格转变为Excel
  16. Win Server 2012 R2 安装SQL 2016先决条件
  17. swift5.0 代码实现跳转页面Segue (performSegue and prepare)
  18. 阿里云ECS主机绑定域名
  19. 2020数学建模C题摘要
  20. 质量功能展开(QFD)的基本原理

热门文章

  1. 微信扫码拉起小程序手机号授权跨端登录
  2. Mysql 自动递增(AUTO INCREMENT) 资料
  3. Domain Adaptive Object Detection for Autonomous Driving under FoggyWeather(翻)
  4. IntelliJ Idea整理Open Recent里面的项目列表
  5. 【el-table 边框颜色修改 实测有效!】
  6. 函数插值法实验报告c语言,插值法实验报告
  7. 老婆登机了_等待登机前检查您的飞行员
  8. log4j2史诗级漏洞攻击重现
  9. 中国对激光产品的检测认证要求
  10. Datawhale--组队学习第12期--python爬虫基础学习---Task02:bs4、xpath和正则表达式(2天)