Spring中@lazy和@Scope(“prototype”)之间有什么区别

时间:2013-10-27 11:10:54

标签: java spring

基于我在线资源上读到的内容,@ lazy和scope prototype按需创建bean,而不像默认范围是singleton。那么何时适合使用@lazy而不是原型,反之亦然或在定义类时一起使用它们?

提前致谢。

2 个答案:

答案 0 :(得分:2)

@Lazy不是范围。要回答您的问题,首先需要了解范围与实例化之间的关系。

每个容器创建一个单身人士(默认范围)(例如,在启动webapp时)。 每次注入都会创建一次原型(每次类获取bean时)。

@Lazy告诉Spring不要急于创建bean。对于单例,这意味着它不会在启动时创建,而是在第一次注入时构建。它对原型没有影响,因为它们在注入之前不会被创建。

总之,@ Lazy仅适用于单身人士。如果所说的懒惰单例由一个非懒惰的单例注入(在启动时创建),则@Lazy不会有效。

注意:@Lazy也会影响其他范围,例如请求,会话等。您可能正在使用代理,这将在技术上控制实际范围/懒惰。

有关范围的更多信息,请参阅Spring的文档:

http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

答案 1 :(得分:1)

懒惰:只有在引用时才初始化bean,但可以重用它。

原型:每次使用bean都会获得一个新实例。

懒惰因此资源密集程度较低。