有状态bean与无状态bean

Posted levontor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有状态bean与无状态bean相关的知识,希望对你有一定的参考价值。

在学习bean的作用域的时候,了解了这个问题。

bean5种作用域:分别是:singleton、prototype、request、session、gloabal session

接下来就讲一下有状态bean与无状态bean:

 

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

无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。
由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫
无状态bean。
但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,而singleton全局只有一个对象。
根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。

参考:http://blog.sina.com.cn/s/blog_796c73ba0101tv3s.html

以上是关于有状态bean与无状态bean的主要内容,如果未能解决你的问题,请参考以下文章

javaEE设计模式——门面模式

何时在无状态会话 bean 上使用有状态会话 bean?

有状态bean和无状态的bean

Spring 上下文中的有状态 bean 和无状态 bean

雷林鹏分享:EJB有状态会话Bean

雷林鹏分享:EJB有状态会话Bean