7.4.4 延迟初始化的bean
优质
小牛编辑
144浏览
2023-12-01
7.4.4 延迟初始化的bean
默认情况下,ApplicationContext
实现在初始化过程中随即创建和配置所有单例bean。一般来说,这种预实例化是可取的,因为可以立即发现配置或周围环境中的错误,而不是在几个小时甚至几天以后。当这种行为不可取时,可以通过将bean定义标记为延迟初始化来阻止预实例化。延迟初始化的bean告诉IoC容器,当bean首次被请求时而不是在启动时创建一个实例。
在XML中,此行为由<bean/>
元素上的lazy-init
属性控制;例如:
<bean class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>
如果上述配置被ApplicationContext使用了,当ApplicationContext
启动时,名为lazy
的bean不会被预先实例化,而not.lazy
bean则会立即预实例化。
然而,当一个延迟初始化的bean是非延迟初始化的单例bean的一个依赖项时,ApplicationContext
会在启动时创建延迟初始化的bean,因为它必须满足单例的依赖性。延迟初始化的bean被注入到其他非延迟初始化的单例bean中。
还可以通过使用<beans/>
元素上的default-lazy-init
属性来控制容器级别的延迟初始化;例如:
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>