最近重新温故一下Javabean, 整理一下bean状态的笔记,有不对的地方希望广大猿友指正啊。
1、在web开发中,bean是否有状态对于bean的生命周期有影响。多大影响还没仔细考虑。
2、有状态的bean,具有数据存储功能。无状态的bean,只有普通的对数据的操作方法,而没有存储功能。
有状态的bean不应该被线程共享,无状态的bean可以被线程共享。
有状态的bean
3、web开发中,
集合啊,用于与数据库交互的存储数据的bean 如user等bean,均是有状态的bean。
而仅仅用于操作其他资源的bean,如userDao,就是无状态的bean。
4、web开发的会话中:
有状态的会话bean:在每个用户的会话生命周期内,该用户都有自己的一个特定的实例,是不会与其他用户共享的,这个bean保存了用户的信息和状态。一旦用户退出或其他情况下会话结束,这个bean的生命周期就结束。
无状态的会话bean:该bean一旦被实例化就会放入会话池,每个用户可以共用该bean。不管使用它的某个用户状态如何,这个bean都可能存在于会话池中供其他用户使用。该bean不能保存任何用户的信息和状态。
5、有状态的bean在多线程环境中是线程不安全的,无状态的bean在多线程环境中是线程安全的。
6、spring中:
有状态的Bean,多线程环境下不安全,那么适合用Prototype原型模式,当然,由于spring使用了ThreadLocal进行多线程处理,绝大多数bean都可以声明为singleton作用域。这是后话。
无状态的Bean适合单例模式(singleton),这样可以共享实例,提高性能。