【问题标题】:Are there any real downsides to lazy bean initialization?延迟 bean 初始化有什么真正的缺点吗?
【发布时间】:2016-03-23 14:58:20
【问题描述】:

最近我开始在spring中使用延迟初始化功能很多。所以我一直在徘徊 - 懒惰地初始化你的bean有什么实际的缺点吗?如果不是 - 为什么惰性不是默认行为?

【问题讨论】:

  • 延迟初始化有一个普遍的问题:如果发生错误的事情,您可能会被触发同时初始化很多东西,从而产生一个原本可能不存在的巨大负载峰值。这取决于您的程序是如何工作的。

标签: java spring lazy-initialization


【解决方案1】:

主要的“缺点”不是立即发现配置问题。如果您有一个仅“偶尔”使用的 bean,并且该 bean 配置错误,那么您的应用程序可能会在生产环境中运行几天,然后再使用该 bean 并引发错误。最好在启动时了解该问题。

此外,通常更希望在启动时而不是在使用期间支付初始化成本(即性能、时间延迟等)。例如,在 Web 应用程序中,您需要在启动时初始化 bean 的成本,而不是客户第一次使用您的购物车(等待购物车 bean 进行第一次初始化),然后在她结账时再次使用,然后在处理付款等时再次进行。

这些是一些原因。

[编辑]

附言来自 Spring 参考指南部分6.4.4 Lazy-initialized beans

默认情况下,ApplicationContext 实现会在初始化过程中急切地创建和配置所有单例 bean。通常,这种预实例化是可取的,因为配置或周围环境中的错误会立即发现,而不是几小时甚至几天之后。当这种行为不可取时,您可以通过将 bean 定义标记为惰性初始化来防止单例 bean 的预实例化。延迟初始化的 bean 告诉 IoC 容器在第一次请求时创建一个 bean 实例,而不是在启动时。

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2010-11-02
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多