Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.5.2 原型(prototype)作用域

6.5.2原型(prototype)作用域

部署非单例的、原型Bean,会导致每次请求Bean实例时,都会返回一个新的实例。也就是说,bean被注入另一个bean,或者通过对容器的getBean()方法调用来请求它。通常来说,对所有有状态bean使用原型作用域,对无状态bean使用单例作用域。
下图说明了Spring原型作用域。数据访问对象(DAO)通常不配置为原型,因为典型的DAO不保持任何会话状态。

以下示例在XML中定义了一个原型Bean:

<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>

与其他作用域相比,Spring不管理原型bean的完整生命周期:容器实例化,配置,然后组装原型对象,并将其交给客户端,而不再记录该原型实例。 因此,虽然,不管是什么作用域,在所有对象上都会调用初始化生命周期的回调方法,但是,在原型作用域的情况下,不会调用已配置的销毁生命周期的回调方法。客户端代码必须清理原型作用域的对象并释放原型bean所持有的昂贵资源。要想获得Spring容器释放原型域的bean所拥有的资源,请尝试使用自定义bean后处理器,它包含对需要清理的bean的引用。

在某些方面,在Spring容器中,原型作用域bean可以替代Java中new运算符,超过该方面的所有生命周期管理工作就需要由客户端去处理了。 (有关Spring容器中bean的生命周期的详细信息,请参见第6.6.1节“生命周期回调”。)

猜你喜欢

转载自www.cnblogs.com/springmorning/p/10349583.html