service和dao 在什么情况下 scope 须为 prototype呢?

在sping里 service和 dao 的bean 的 scope熟悉往往是 默认的 singleton,无状态,
在什么情况下才要用prototype呢,期待熟悉的人指点迷津,最好能举例说明下,谢谢

这个问题spring 2.5 开发手册上有很好解释,详细请查阅:

部分解释:

3.4.2. Prototype作用域
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

下图演示了Spring的prototype作用域。请注意,通常情况下,DAO不会被配置成prototype,因为DAO通常不会持有任何会话状态,因此应该使用singleton作用域。

3.4.1. Singleton作用域
当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

换言之,当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。

singleton是单例,如果你的这个bean需要共享一些信息,那么可以配置成singleton,这样的bean可以保存一些信息,方便交互,但是这样的话就需要自己去处理bean的同步问题,必须保证这个bean是线程安全的。
prototype是原型,每次得到的bean实例都是新的,不需要自己去考虑同步问题,但就无法进行成员共享。 :lol: