跳至主要內容

懒加载(Lazy Initialization)Bean

会敲代码的程序猿原创SpringSpring Framework大约 1 分钟

懒加载(Lazy Initialization)Bean

在Spring框架中,ApplicationContext的默认行为是在启动过程中立即创建并配置所有的单例Bean。 这种做法有利于及时发现配置错误或环境问题,避免了错误在应用运行一段时间后才暴露。 然而,如果需要改变这一行为,可以通过设置Bean定义为懒加载(lazy-initialized)来实现。 这样一来,Bean的实例化将被推迟到第一次实际请求该Bean时进行,而不是在应用启动时完成,从而提供了更大的灵活性和控制。

在XML中,通过<bean/>元素上的lazy-init属性来控制这种行为,如下例所示:

<!-- 将Bean定义为懒加载 -->
<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/>
<!-- 默认立即创建Bean -->
<bean name="not.lazy" class="com.something.AnotherBean"/>

当上述配置被ApplicationContext加载启动时,lazy Bean不会立即预实例化,而not.lazy Bean则会被急切地预实例化。

然而,当一个懒加载的Bean作为另一个未标记为懒加载单例Bean的依赖项时,ApplicationContext会在启动时创建这个懒加载的Bean, 因为它必须满足单例Bean的依赖关系。懒加载的Bean会被注入到一个未标记为懒加载的单例Bean中。

你还可以通过在<beans/>元素上使用default-lazy-init属性来控制容器级别的懒加载初始化,如下例所示:

<beans default-lazy-init="true">
	<!-- 不会预实例化任何Bean... -->
</beans>