Java 弹簧惰载
有很多关于@Lazy的例子和文档。也许我没明白,但为什么要用它呢?在启动时实例化bean的成本<1毫秒。对bean使用延迟加载可以为您提供一系列新的集成测试。此外,当您的应用程序在第一次调用延迟加载的bean时启动时没有错误和崩溃,这可能是相当危险的。那为什么呢?有人举过一个好例子吗?当您的Java 弹簧惰载,java,spring,lazy-loading,Java,Spring,Lazy Loading,有很多关于@Lazy的例子和文档。也许我没明白,但为什么要用它呢?在启动时实例化bean的成本
@Lazy
注释组件依赖于某些要正确初始化的基础结构时,惰性初始化可能很有用。因此,例如,如果您有一个组件需要在启动期间下载一些文件,那么使用@Lazy
对其进行注释可能非常有意义。这样,当文件暂时不使用时,它不会尝试下载文件(这需要很多时间)
然而,我个人认为使用惰性组件通常会导致糟糕的设计。在使用它之前要三思。如果构造函数(和后期构造挂钩)没有太多工作要做,那么实例化bean的成本<1ms。但它们可能需要更长的时间。想象一个bean在启动时读取许多文件,或者连接到一个缓慢且很少使用的外部服务。默认情况下急切地加载是大多数情况下您想要的,这是一种更安全的默认设置,但这并不意味着懒惰就没有用处。阅读此答案不要获取到其他文章的链接我不知道在这种情况下是否会使用它。看看SpringBootConfigServer(这是一个很长的运行场景),这可能是致命的。我在考虑一些场景,其中bean不在单例范围内。比如说,我们有一个全州服务,它只是偶尔被调用。这是否可以避免不必要的资源分配?在这种情况下,一个简单的工厂是最好的选择。只需忽略延迟加载并创建一个工厂,该工厂将在运行时构建您的服务实例。感谢factory,只有在您真正需要时才实例化您的服务。