Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.4.4 延迟初始化的bean

6.4.4 延迟初始化的bean

默认情况下,ApplicationContext实现会迫切地创建和配置所有单例bean,作为初始化过程的一部分。普遍情况下,这种预先实例化是合适的,因为配置或周围环境的错误是可以立即被发现的,而不是几小时甚至几天后才发现。如果不希望出现这种行为的话,可以通过将bean的定义标记为延迟初始化来阻止单例bean的预实例化。延迟初始化的bean告诉IoC容器在第一次请求时创建bean实例,而不是在启动时。

在XML中,此行为由<bean />元素上的lazy-init属性控制;例如:

<bean id="lazy" 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>

猜你喜欢

转载自www.cnblogs.com/springmorning/p/10335635.html