web里面,什么是无状态bean什么是有状态bean

richard_2010 2010-10-29 02:10:16
不管是spring还是ejb都有这样一个概念,我刚开始以为无状态bean就是没有成员变量,后来发现不是那么回事。
ejb里面无状态的意思好像是说容器不为你保存变量的值,请问谁对这个比较了解的,说一说吧。
最好能有代码描述,尤其是无状态和有状态bean在什么场合使用。
...全文
1658 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjw1989 2012-03-11
  • 打赏
  • 举报
回复
知识太薄了,不太懂。
跑跑跑2683 2012-02-11
  • 打赏
  • 举报
回复
来学习的。。
laifu901 2011-11-24
  • 打赏
  • 举报
回复
都太牛逼了
sunboyzsm 2011-10-10
  • 打赏
  • 举报
回复
复习。。。
  • 打赏
  • 举报
回复
好贴!学习学习。。。
zhu081607 2010-11-01
  • 打赏
  • 举报
回复
好贴,学习中!
xianaofei 2010-11-01
  • 打赏
  • 举报
回复 1
首先,无状态Bean(Stateless Beans)和有状态bean(Stateful Beans)都是Session Bean,都是服务器端提供的可以被调用的服务。而前者仅仅是提供服务的调用,而后者维护了一个会话状态,每一次的调用都使会话的状态发生改变,直到会话的结束(购物车就是这样的一个例子)。在调用stateless Beans时,每一次都要提供这次调用的所有的信息,但是速度相对较快,用于功能单一的服务调用。而调用stateful Bean时,可以每一次都提供部分信息,直到提交才完成整个会话,期间通过一个相应id号使得每一次调用与特定的stateful Bean关联。相对于stateless Beans来说,Stateful Beans速度较慢,还要使用一定的内存来维护状态,但是能够完成比较复杂的服务调用。
richard_2010 2010-11-01
  • 打赏
  • 举报
回复
大家可以看看我写的这篇博客
http://blog.csdn.net/richard_2010/archive/2010/11/01/5980051.aspx
结合了大家的回复写出了对Stateless和Stateful会话bean的认识。
richard_2010 2010-11-01
  • 打赏
  • 举报
回复
我基本已经搞定无状态有状态的含义了,谢谢诸位的探讨。

不过ls有的人是在别处直接复制别人的回复过来的,没意思。
richard_2010 2010-10-31
  • 打赏
  • 举报
回复
不对,session bean也要实现自己的商业逻辑,也就是业务逻辑
richard_2010 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 panhaichun 的回复:]

你把spring的prototype比作成了ejb中的stateful session bean 了。
ejb中的stateful指的是有状态会话bean, 注意 “会话” 2个字。

[/Quote]
session bean是代表客户应用和EJB容器之间的会话,spring里面的bean是实现业务逻辑
除了这方面的区别,按我理解,认为prototype bean和stateful seesion bean是差不多的,都是每次“请求”都会产生一个新的实例
richard_2010 2010-10-31
  • 打赏
  • 举报
回复
越来越迷糊了,可能快到达事物的本质了,黎明前的黑暗吧。

谁能继续解释下为什么要分有状态和无状态的bean?通过这个问题应该能更好的理解有状态和无状态的含义。
panhaichun 2010-10-30
  • 打赏
  • 举报
回复
有状态的bean也有可能是 为所有用户只创建一个对象。就是说有状态的bean也有可能是单利的.
比如说下面这样

public class UserServiceImpl implements UserService {

private int saveTimes;//记录调用了多少次saveuser方法, 这个属性是有状态的

private UserDao userDao;//userdao也是无状态的

public synchronized void saveUser(User user) {
saveTimes++;
}
}
richard_2010 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 panhaichun 的回复:]

一个bean没有成员变量,或者那个bean的成员变量也是无状态的bean,那么这个bean就是无状态的。顺便说明一下单利对象不一定是无状态的。

spring里面的singleton和ejb里面的stateless使用起来基本一样,但是他们在实现上还是有区别的。

prototype和stateful区别就较大了,ejb的stateful可以用来保存客户端的数据,比如说用来实现购物车;
……
[/Quote]

在POJO里面,成员变量无状态的怎么表示?

谁能贴点代码出来看看?
allen3010 2010-10-30
  • 打赏
  • 举报
回复
站位,学习哦
richard_2010 2010-10-30
  • 打赏
  • 举报
回复
上代码最好了,不光是ejb的,还有别的框架下的代码都可以
leecyz 2010-10-30
  • 打赏
  • 举报
回复
我只知道有状态bean(statefull)是为每个用户创建对象。
无状态bean(stateless)为所有用户创建一个对象。类似单例模式的感觉。

无状态的好处就是只建立一个对象,不耗资源,有状态的耗资源。大多数情况下还是用statefull.
我个人ejb用得不深,项目经验少,解释不到位。
panhaichun 2010-10-30
  • 打赏
  • 举报
回复
同样的道理pring的singleton也可以有状态啊,只是它的状态可以被大家共享而已
panhaichun 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 richard_2010 的回复:]

按你的意思是如果方法里面对成员变量进行修改了就是有状态的么?如果我有个方法
public void methodA(){
if(userDao != null){
userDao = new UserDaoImpl();
}
}
那这个时候userDao是有状态还是无状态?

按有状态bean的定义是web容器会保存bean的状态,那在spring里面,每次请求prototype bean都会创建一个新的实例,而请求结束后这个实例是会销毁的,这样无所谓保存不保存bean的状态了,因为也不可能能访问被保存的状态了,那是不是说prototype bean不可能是有状态的呢?期待有人解答。
[/Quote]

你把spring的prototype比作成了ejb中的stateful session bean 了。
ejb中的stateful指的是有状态会话bean, 注意 “会话” 2个字。

当然可以说spring的prototype是有状态的,它可以保存一次请求的状态啊,典型的如struts2的action,难道说不是有状态的吗?

richard_2010 2010-10-30
  • 打赏
  • 举报
回复
这个板块好像有点冷
加载更多回复(11)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧