对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

延迟初始化的 Bean

默认情况下,ApplicationContext 的实现会在初始化过程中急切地创建并配置所有 单例 bean。通常,这种预先实例化是可取的,因为配置或环境中的错误可以立即被发现,而不是在数小时甚至数天之后才暴露出来。当这种行为不可取时,你可以通过将 bean 定义标记为懒加载(lazy-initialized)来阻止单例 bean 的预实例化。一个懒加载的 bean 会告诉 IoC 容器:仅在首次请求该 bean 时才创建其实例,而不是在启动时就创建。spring-doc.cadn.net.cn

在 XML 中,此行为由 lazy-init 元素上的 <bean/> 属性控制,如下例所示:spring-doc.cadn.net.cn

<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.something.AnotherBean"/>

当上述配置被 ApplicationContext 加载时,lazy bean 在 ApplicationContext 启动时不会被急切实例化,而 not.lazy bean 则会被急切实例化。spring-doc.cadn.net.cn

然而,当一个延迟初始化的 bean 是一个非延迟初始化的单例 bean 的依赖项时,ApplicationContext 会在启动时创建该延迟初始化的 bean,因为它必须满足单例 bean 的依赖关系。该延迟初始化的 bean 会被注入到其他地方一个非延迟初始化的单例 bean 中。spring-doc.cadn.net.cn

您还可以通过在 default-lazy-init 元素上使用 <beans/> 属性,在容器级别控制延迟初始化,如下例所示:spring-doc.cadn.net.cn

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