懒惰的初始化是否有任何真正的缺点?

时间:2016-03-23 14:58:20

标签: java spring lazy-initialization

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

1 个答案:

答案 0 :(得分:4)

主要"缺点"没有立即捕获配置问题。如果你有一个只使用过的bean"偶尔",并且那个bean配置错误,你的应用程序可能会在生产中停留数天才能使用该bean并抛出错误。在启动时了解这个问题要好得多。

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

这些是一些原因。

[编辑]

P.S。来自Spring参考指南部分6.4.4 Lazy-initialized beans

  

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