Java 惰性bean初始化有什么真正的缺点吗?

Java 惰性bean初始化有什么真正的缺点吗?,java,spring,lazy-initialization,Java,Spring,Lazy Initialization,最近,我开始在spring中大量使用惰性初始化特性。所以我一直在徘徊——懒散地初始化bean有什么实际的缺点吗?如果不是-为什么不是默认行为?主要的“缺点”不是立即捕获配置问题。如果您有一个仅“偶尔”使用的bean,并且该bean被错误配置,那么您的应用程序可能在使用该bean并抛出错误之前已经在生产环境中运行了几天。在创业时了解这个问题要好得多 此外,通常更希望在启动时而不是在使用期间支付初始化成本(即性能、时间延迟等)。例如,在Web应用程序中,您想要的是在启动时初始化bean的成本,而不是

最近,我开始在spring中大量使用惰性初始化特性。所以我一直在徘徊——懒散地初始化bean有什么实际的缺点吗?如果不是-为什么不是默认行为?

主要的“缺点”不是立即捕获配置问题。如果您有一个仅“偶尔”使用的bean,并且该bean被错误配置,那么您的应用程序可能在使用该bean并抛出错误之前已经在生产环境中运行了几天。在创业时了解这个问题要好得多

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

这就是其中的一些原因

[编辑]

p、 s.来自弹簧参考指南部分

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


惰性初始化有一个普遍的问题:如果发生了错误的事情,你可能会被触发一次初始化很多东西,从而产生一个可能不存在的巨大负载峰值。这取决于你的程序如何工作。