问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Spring中到底什么叫有无状态的Bean,什么叫

发布网友 发布时间:2022-04-22 15:00

我来回答

1个回答

热心网友 时间:2023-07-16 00:29

在 Spring IoC 容器中具有以下几种作用域:

@scope默认是单例模式(singleton),如果需要设置的话@scope("prototype")
或xml配置如下:

bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。
由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响。

每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

示例:

如果该Bean配置为singleton,在并发访问下会出现问题
假设有2个用户user1,user2访问,都调用到了该Bean。
1.当user1 调用到程序中的1步骤的时候,该Bean的私有变量user被付值为user1;
2.理想的状况,当user1走到2步骤的时候,私有变量user应该为user1;
3.但如果在user1调用到2步骤之前,user2开始运行到了1步骤了,由于单态的资源共享,则私有变量user被修改为user2;
4.这种情况下,user1的步骤2用到的user.getId()实际用到是user2的对象。
实际应该是这个例子不应该用实例变量,这样就使得这个Bean由无状态变成了有状态Bean。

对于SSH架构的系统,很少关心这方面,因为我们用到的一般都是singleton. Bean的注入由Spring管理。

Struts2中的Action因为会有User这样的实例对象,是有状态信息的,在多线程环境下是不安全的,所以Struts2默认的实现是Prototype模式。也就是每个请求都新生成一个Action实例,所以不存在线程安全问题。需要注意的是,如果由Spring管理action的生命周期, scope要配成prototype作用域。

Struts1是基于单例模式实现,也就是只有一个Action实例供多线程使用。默认的模式是前台页面数据通过actionForm传入,在action中的excute方法接收,这样action是无状态的,所以一般情况下Strunts1是线程安全的。如果Action中用了实例变量,那么就变成有状态了,同样是非线程安全的。像下面这样就是线程不安全的。

Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web 容器负责的。
一个Servlet类在Application中只有一个实例存在,有多个线程在使用这个实例。这是单例模式的应用。
无状态的单例是线程安全的,但我们如果在Servlet里用了实例变量(私有变量),那么就变成有状态了,是非线程安全的。
如下面的用法就是不安全的,因为user是有状态信息的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 崔玉涛推荐的3种益生菌 谁有《听说听说2009》百度云无删减完整版在线观看,彭于晏主演的? 康萃乐益生菌可以长期吃吗?会不会有依赖? 法国人的姓名太长,订机票无法出票,有没有知道这些姓(nom)的,可以怎么缩写啊??!! NOM认证的标志 护照上的surnae-nom是什么意思 后缀名为.nom是什么意思 怎么打开 404 Not Found 法语 nom是姓还是名 轿车档位字母PRNOM是什么意思 ton nom mon coeur 什么意思? 法语中nom ,prenom 的意思。 三坐标检测数据Nom、Act什么意思 Nom打头的女生英文名 nom 、koc分别是什么化学物质 尺寸标注后面的NOM是什么意思? 墨西哥出口为什么要做NOM认证 NOM NOM DESSERT BAR怎么样 nom什么意思 有一首歌词全是nom nom nom nom的歌叫啥求 康萃乐里面的鼠李糖乳杆菌是什么东西?有什么用? EJB有状态的会话Bean和无状态的会话Bean的区别 美国康萃乐益生菌好用吗? 无状态的javabean中可以使用静态变量吗 有状态的bean和无状态的bean的区别 Culturelle儿童益生菌冲剂是怎么服用的?该冲多少水? EJB3.0的有状态Bean与无状态Bean的最基础问题 EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 吃美国康萃乐益生菌还用吃双岐杆菌吗 Spring bean作用域 Spring 单例 多例 线程安全等问题,想请教大家 spring配置文件中能够用到的bean的作用域都有哪些 大人可以吃益生菌吗? EJb中有状态会话构件和无状态会话构件 慢性结肠炎用康萃乐益生菌可以治疗吗 宝宝知道 spring 的singleton 和prototype的区别和应用场合? spring bean作用域怎么选择 spring什么情况下使用非单例bean SPRING中属性SCOPE的prototype是什么意思 为什么说传统的Servlet对象是一个无状态对象