根据我在网上阅读的资源,@lazy 和范围原型都按需创建 bean,这与默认范围(单例)不同。那么什么时候适合使用@lazy而不是prototype,反之亦然,或者在定义类时一起使用它们呢?
提前致谢。
@Lazy 不是一个范围。要回答您的问题,您首先需要了解范围和实例化之间的关系。
每个容器创建一次单例(默认范围)(例如,在 Web 应用程序启动时)。每次注入都会创建一次原型(每次类获取 bean 时)。
@Lazy 告诉 Spring 不要急于创建 bean。对于单例来说,这意味着它不会在启动时创建,而是在第一次注入时构建。它对原型没有影响,因为它们在注入之前不会被创建。
综上所述,@Lazy 只适用于单例。如果所述惰性单例是由非惰性单例(在启动时创建)注入的,则 @Lazy 不会有效执行任何操作。
注意:@Lazy 还可以影响其他范围,例如请求、会话等。您可能正在使用这些代理,这将在技术上控制实际范围/惰性。
有关范围的更多信息,请参阅 Spring 的文档:
http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html
归档时间: |
|
查看次数: |
6043 次 |
最近记录: |