|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
延迟初始化的Bean
默认情况下,ApplicationContext 实现会在初始化过程中急切地创建和配置所有
单例 bean。通常,这种预实例化是可取的,因为可以在配置或周围环境中的错误被立即发现,而不是在数小时甚至数天之后。当这种行为不可取时,可以通过将 bean 定义标记为延迟初始化来防止单例 bean 的预实例化。延迟初始化的 bean 会告诉 IoC 容器在首次请求时创建 bean 实例,而不是在启动时。
在 XML 中,此行为由 lazy-init 属性控制,该属性位于 <bean/> 元素上,如下例所示:
<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 会被急切地预先实例化。
然而,当一个延迟初始化的bean是另一个非延迟初始化的单例bean的依赖项时,ApplicationContext会在启动时创建这个延迟初始化的bean,因为它必须满足单例bean的依赖项。这个延迟初始化的bean会被注入到其他非延迟初始化的单例bean中。
您还可以通过在 <beans/> 元素上使用 default-lazy-init 属性,在容器级别控制延迟初始化,如下例所示:
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>