【问题标题】:Lazily-instantiated bean in spring春天的懒豆
【发布时间】:2015-02-03 09:39:32
【问题描述】:

我是 Spring 框架的新手,我知道默认行为 Spring 在启动时实例化单例 bean,这称为热切实例化。这是一种很好的行为,因为它仅在启动时暴露了 bean 实例化的任何问题。但有时这种行为不是预期的,因此通过在 bean 定义中添加 lazy-init="true" 可以将实例化推迟到第一个请求。

<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>

那么想知道我们可以为 Lazily-instantiated bean 使用什么样的场景?请举例说明。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    我想到的第一个场景是,如果您有许多要实例化的 bean,并且您有一个启动时间应该很短的系统(例如,有时您需要重新部署的 Web 应用程序)停止服务器)。使用延迟初始化,您可以在启动核心 bean 时实例化,而您可以在以后实例化不太重要或使用频率较低的 bean。

    【讨论】:

      【解决方案2】:

      一般来说,延迟加载总是致力于减少资源需求。 @Giovanni 的更快启动示例,尤其是在频繁重新部署的情况下,在我看来是一个很好的示例。

      需要注意的一点,默认情况下 spring bean 是单例的,如果你让它们在高并发环境中延迟加载,你可能会遇到问题,请注意部分 延迟实例化:多线程应用程序中的危险 em> 来自http://www.javaworld.com/article/2077568/learn-java/java-tip-67--lazy-instantiation.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2017-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多