我是Spring框架的新手,我知道默认行为Spring在启动时实例化单例bean,这被称为急切实例化。这是一个很好的行为,因为它只在启动时暴露了bean实例化中的任何问题。但有时这种行为是不可取的,因此通过在bean定义中添加lazy-init =“true”,可以将实例化推迟到第一个请求。
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>
那么想知道我们可以为Lazily实例化的bean做什么样的场景?请举例说明。
答案 0 :(得分:2)
我想到的第一个场景是,当您有多个bean要实例化并且您的系统应该具有较短的启动时间时(例如,有时您需要重新部署的Web应用程序)停止服务器)。使用延迟初始化,您可以在启动核心bean实例化,同时可以实例化较不重要或较少使用的后续bean。
答案 1 :(得分:1)
一般来说,延迟加载总是在减少资源需求。 @ Giovanni的更快启动的例子,特别是在频繁重新部署的情况下,我认为是一个很好的例子。
有一点需要注意,默认情况下,spring bean是单例,如果你在高度并发的环境中使它们延迟加载,你可能会遇到问题,请注意 Lazy instantiation部分:多线程应用程序中的危险来自http://www.javaworld.com/article/2077568/learn-java/java-tip-67--lazy-instantiation.html