spring lazy bean初始化有什么真实的的缺点吗?

1l5u6lss  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(89)

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

zzlelutf

zzlelutf1#

主要的“缺点”是不能立即捕获配置问题。如果您有一个只“偶尔”使用的bean,并且该bean配置错误,那么您的应用程序在使用该bean并抛出错误之前可能会在生产环境中停止几天。在启动时了解这个问题要好得多。
另外,通常更期望支付初始化成本(即,性能、时间延迟等)。例如,在Web应用程序中,您需要在启动时初始化bean的成本,而不是客户第一次使用您的购物车(等待购物车bean进行第一次初始化),然后在她结账时再次使用,然后在处理付款时再次使用,等等。
这是一些原因。
[编辑]
p.s.来自Spring参考指南第6.4.4节Lazy-initialized beans
默认情况下,ApplicationContext实现会在初始化过程中急切地创建和配置所有单例bean。通常,这种预示例化是期望的,因为配置或周围环境中的错误被立即发现,而不是几小时或甚至几天之后。如果不需要这种行为,可以通过将bean定义标记为lazy-initialized来防止单例bean的预示例化。延迟初始化的bean告诉IoC容器在第一次请求时创建bean示例,而不是在启动时。

ou6hu8tu

ou6hu8tu2#

这是我们今天才发现的,如果你的bean方法之一有@KafkaListener注解(在其他框架中可能存在这个问题的变体),并且您使bean @Lazy以避免与此bean关联的另一个bean的循环引用,并且没有其他对这些bean的引用,那么bean将永远不会被示例化,并且Kafka侦听器方法将永远不会激活,而不对可用消息进行触发。

相关问题