每次的总结,都是一种进步,把自己理解的东西记录下来不容易,让别人看懂更不容易。

第一:基本概念:

1、有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。

2、无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。

第二:看看代加深影响:

/*** 有状态bean,有state,user等属性,并且user有存偖功能,是可变的。

*

*@authorPeter Wei

**/

public classStatefulBean {public intstate;//由于多线程环境下,user是引用对象,是非线程安全的

publicUser user;public intgetState() {returnstate;

}public void setState(intstate) {this.state =state;

}publicUser getUser() {returnuser;

}public voidsetUser(User user) {this.user =user;

}

}/*** 无状态bean,不能存偖数据。因为没有任何属性,所以是不可变的。只有一系统的方法操作。

*

*@authorPeter Wei

**/

public classStatelessBeanService {//虽然有billDao属性,但billDao是没有状态信息的,是Stateless Bean.

BillDao billDao;publicBillDao getBillDao() {returnbillDao;

}public voidsetBillDao(BillDao billDao) {this.billDao =billDao;

}public ListfindUser(String Id) {return null;

}

}

第三:Spring中的有状态(Stateful)和无状态(Stateless)

1.通过上面的分析,相信大家已经对有状态和无状态有了一定的理解。无状态的Bean适合用不变模式,技术就是单例模式,这样可以共享实例,提高性能。有状态的Bean,多线程环境下不安全,那么适合用Prototype原型模式。Prototype: 每次对bean的请求都会创建一个新的bean实例。

2.默认情况下,从Spring bean工厂所取得的实例为singleton(scope属性为singleton),容器只存在一个共享的bean实例。

3.理解了两者的关系,那么scope选择的原则就很容易了:有状态的bean都使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

4.如Service层、Dao层用默认singleton就行,虽然Service类也有dao这样的属性,但dao这些类都是没有状态信息的,也就是相当于不变(immutable)类,所以不影响。Struts2中的Action因为会有User、BizEntity这样的实例对象,是有状态信息的,在多线程环境下是不安全的,所以Struts2默认的实现是Prototype模式。在Spring中,Struts2的Action中,scope要配成prototype作用域。

第四:Servlet是单例模式1.Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web 容器负责的。一个Servlet类在Application中只有一个实例存在,也就是有多个线程在使用这个实例。这是单例模式的应用。无状态的单例是线程安全的,但我们如果在Servlet里用了实例变量,那么就变成有状态了,是非线程安全的。如下面的用法就是不安全的,因为user,out都是有状态信息的。

/*** 非线程安全的Servlet。

*@authorPeter Wei

**/

public classUnSafeServlet HttpServlet{

User user;

PrintWriter out;public void doGet (HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException{//do something...

}

}

Out,Request,Response,Session,Config,Page,PageContext是线程安全的,Application在整个系统内被使用,所以不是线程安全的.

第五:SpringMvc默认是单例默认,Struts2默认的实现是Prototype模式。

mysql有状态无状态_有状态和无状态的对象区别相关推荐

  1. 魅族 虚拟位置服务状态:未运行_带功率表快充状态一目了然,魅族超充USBC移动电源即将发售...

    5月8日魅族举行线上发布会,发布了新一代旗舰魅族17系列机型,并推出了多款充电品类配件,其中一款是全新的魅族双向快充移动电源,名称为:"魅族超充 USB-C 移动电源",容量是很常 ...

  2. 超微服务器主板启动无反应_我如何构建无服务器启动

    超微服务器主板启动无反应 by Vikram Rangnekar 由Vikram Rangnekar 我如何构建无服务器启动 (How I Built a Serverless Startup) Le ...

  3. mysql创建非聚集索引_聚集索引和非聚集索引的区别

    作者:riemann riemann.blog.csdn.net/article/details/90324846 一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SE ...

  4. sim卡没坏但苹果手机无服务_手机突然显示无SIM卡?这样做就能恢复~

    大家有没经历过明明SIM卡在卡槽里放得好好的,手机却突然显示无SIM卡的状况?没有了SIM卡手机就失去了灵魂,打电话.上网的功能都不能用了.这到底是怎么一回事儿?让小翼帮你来解答~ 什么是SIM卡? ...

  5. mysql关系型数据库的优点和缺点_关系型数据库和非关系型数据库的区别和特点...

    关系型数据库 采用关系模型来组织数据结构的数据库(二维表) cle    DB2    SQLServer    Mysql     SQLite都是关系型数据库 优点:容易理解,它的逻辑类似常见的表 ...

  6. mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?

    块存储: 需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口.提供随机读写,可以像使用物理硬盘一样格式化并建立文件系统来使用块存储,块存储可用于绝大部分通 ...

  7. excel和mysql的区别是什么_请问数据库和电子表格之间有什么区别

    展开全部 1.不同的安全: 数据62616964757a686964616fe59b9ee7ad9431333433653932库的安全性比Excel好很多.至少当我在1653编辑4102到一半的数据 ...

  8. java无框架_从框架到无框架[关闭]

    我完全了解你的感受 . 我在4〜5年前开始使用PHP(我来自Delphi,lol),并开始使用纯PHP . 我所拥有的是"CMS面板之类",它只读取所有表格字段并创建表格 . 在某 ...

  9. spring期刊状态_无状态Spring安全性第2部分:无状态认证

    spring期刊状态 Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了有关CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证 ...

最新文章

  1. java正则表达式 匹配%号_java正则表达式匹配带有括号的电话号为什么匹配不上...
  2. C++中标准模板库std::pair的实现
  3. linux命令行操作之文件操作总结
  4. rsync 远程同步——安全高效的异地备份策略
  5. 制作css开关,纯css实现开关效果
  6. java中springdi_java中spring入门
  7. 第二十五期:知乎用Go替代Python,说明了啥
  8. linux文件系统挂载不上,nfs文件系统在linux下挂载不上的解决办法
  9. TBXML常用API
  10. 【并发技术16】线程同步工具Exchanger的使用
  11. 001 - JavaScript Array String
  12. zynq开发系列3:GPIO连接MIO通过按键控制LED灯亮起
  13. python按位与怎么算_python 的按位与、或、异或 运算
  14. 南方科技大学计算机系师资,于仕琪 - 教师个人主页 - 南方科技大学
  15. linux自启动配置文件,linux 开机自启动设置
  16. Java程序设置本地代理
  17. 人工智能 python 考证_写人作文
  18. android edittext 输入手机号码格式变化
  19. 感谢各位iPhone12机主,苹果又高了
  20. VS x86 x64 anycpu 编译运行对照表

热门文章

  1. 网站内容批量抓取和《著作权法》
  2. ip地址和MAC地址的捆绑
  3. 通过SecureCRT访问亚马逊Amazon EC2主机
  4. C++11多线程03
  5. NIO 02 (转)
  6. VS2012项目中使用CocoStudio相关文件的设置
  7. Silverlight --- Behavior技术(三)
  8. vc++ cfile 文件操作
  9. 大数据之-Hadoop3.x_MapReduce_WordCount案例_Debug调试---大数据之hadoop3.x工作笔记0092
  10. STM32工作笔记005---STM32芯片解读