基于我在线资源上读到的内容,@ lazy和scope prototype按需创建bean,而不像默认范围是singleton。那么何时适合使用@lazy而不是原型,反之亦然或在定义类时一起使用它们?
提前致谢。
答案 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都会获得一个新实例。
懒惰因此资源密集程度较低。