为什么原型范围与Stateful bean一起使用?

时间:2019-03-03 12:41:23

标签: java spring inversion-of-control javabeans

春季文档- 根据经验,应将原型作用域用于所有有状态的bean,而单例作用域应用于无状态的bean。

因此,当您必须在整个上下文中一致地维护某些状态/数据时,必须使用有状态的Bean。说银行应用程序。您希望对象在各种操作(存款,提款等)中保持同步。

因此,在单例作用域中,您会得到相同的结果-上下文中的对象一致性。

那为什么javadoc会声明相反的内容?

帮助!! :)

1 个答案:

答案 0 :(得分:0)

主要是由于同步问题,在多线程环境中使用单例bean时需要保持同步。使用原型Bean,每个线程都会获得该Bean的新实例,因此您不必担心跨线程同步对Bean状态的访问。

大多数情况下,您不会遇到使用有状态bean的需要,因为状态是由单独的持久层提供的,或者由调用者本身直接提供的。

具有状态的单例bean的一个示例是高速缓存。通过使用诸如infinispan,guava,hazlecast之类的专用缓存库,您在这里不需要太在意同步,因为这方面是由这些库为您处理的。

鉴于您的银行业务示例,您可能不想将交易详细信息存储在Java堆等外围存储中。如果您的应用程序由于某种原因崩溃,所有这些信息将无法恢复丢失。此信息需要存储在诸如数据库之类的持久性存储中。