春季文档- 根据经验,应将原型作用域用于所有有状态的bean,而单例作用域应用于无状态的bean。
因此,当您必须在整个上下文中一致地维护某些状态/数据时,必须使用有状态的Bean。说银行应用程序。您希望对象在各种操作(存款,提款等)中保持同步。
因此,在单例作用域中,您会得到相同的结果-上下文中的对象一致性。
那为什么javadoc会声明相反的内容?
帮助!! :)
答案 0 :(得分:0)
主要是由于同步问题,在多线程环境中使用单例bean时需要保持同步。使用原型Bean,每个线程都会获得该Bean的新实例,因此您不必担心跨线程同步对Bean状态的访问。
大多数情况下,您不会遇到使用有状态bean的需要,因为状态是由单独的持久层提供的,或者由调用者本身直接提供的。
具有状态的单例bean的一个示例是高速缓存。通过使用诸如infinispan,guava,hazlecast之类的专用缓存库,您在这里不需要太在意同步,因为这方面是由这些库为您处理的。
鉴于您的银行业务示例,您可能不想将交易详细信息存储在Java堆等外围存储中。如果您的应用程序由于某种原因崩溃,所有这些信息将无法恢复丢失。此信息需要存储在诸如数据库之类的持久性存储中。