`

spring延迟初始化

 
阅读更多

ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。

有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。一个延迟初始化bean将告诉IoC 容器是在启动时还是在第一次被用到时实例化。

在XML配置文件中,延迟初始化将通过<bean/>元素中的lazy-init属性来进行控制。例如:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"> <!-- various properties here... --> </bean> <bean name="not.lazy" class="com.foo.AnotherBean"> <!-- various properties here... --> </bean>

ApplicationContext实现加载上述配置时,设置为lazy的bean将不会ApplicationContext启动时提前被实例化,而not.lazy却会被提前实例化。

需要说明的是,如果一个bean被设置为延迟初始化,而另一个非延迟初始化的singleton bean依赖于它,那么当ApplicationContext提前实例化singleton bean时,它必须也确保所有上述singleton 依赖bean也被预先初始化,当然也包括设置为延迟实例化的bean。因此,如果Ioc容器在启动的时候创建了那些设置为延迟实例化的bean的实例,你也不要觉得奇怪,因为那些延迟初始化的bean可能在配置的某个地方被注入到了一个非延迟初始化singleton bean里面。

在容器层次中通过在<beans/>元素上使用'default-lazy-init'属性来控制延迟初始化也是可能的。如下面的配置:

<beans default-lazy-init="true"> <!-- no beans will be eagerly pre-instantiated... --> </beans>
分享到:
评论

相关推荐

    Spring 延迟实例化

    ### Spring 延迟实例化的理解与应用 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,它提供了一种全面的方式来构建应用程序。Spring的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程...

    浅谈spring容器中bean的初始化

    这可以有效地延迟初始化,提高应用启动速度。例如,配置为`&lt;bean id="people" class="People" lazy-init="true" /&gt;`,那么在`main`方法中获取`people` Bean时才会创建它。默认情况下,`lazy-init`的值为`default`或`...

    Spring源码学习六:bean初始化1

    在Spring框架中,Bean的初始化是其生命周期中的关键步骤,特别是在单例模式下,Spring容器会确保在应用程序启动时创建并初始化所有非延迟加载的单例Bean。在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的...

    Spring实例化Bean顺序

    但是,这并不总是可靠的,因为Spring通常会延迟初始化Bean,除非显式要求或存在依赖关系。 2. **依赖注入**:Spring容器会根据Bean之间的依赖关系来决定实例化顺序。如果一个Bean依赖于另一个Bean,那么被依赖的...

    SpringIOC refresh()初始化代码实例

    SpringIOC refresh()初始化代码实例的主要作用是实例化所有不需要延迟初始化的单例bean,这些bean是在应用程序启动时需要初始化的。在 Spring 框架中,bean 的实例化是通过 BeanFactory 来完成的,而 refresh() 方法...

    spring bean life cycle

    例如,我们可以设置`lazy-init`属性使Bean延迟初始化,直到它被实际使用时才会被实例化。`scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活...

    Spring Boot 全局懒加载机制.docx

    在Spring框架中,bean的默认行为是在应用启动时创建并初始化。然而,有时我们希望某些bean在实际需要时才进行初始化,这就是所谓的“懒加载”(Lazy Initialization)。Spring Boot 2.2及更高版本引入了一个全局懒...

    spring类库 spring类库

    1. **Spring Core**:这是Spring框架的基础,提供IoC容器,负责管理对象的创建、初始化、装配和销毁。它通过XML配置或注解实现依赖注入,降低了组件之间的耦合度。 2. **Bean工厂和ApplicationContext**:Bean工厂...

    spring-beans-3.0.xsd

    例如,`&lt;bean&gt;`元素新增了`lazy-init`属性,可以指定bean是否延迟初始化,这有助于优化应用启动性能。`&lt;beans&gt;`元素添加了`default-lazy-init`属性,可以设置整个配置文件中所有bean的默认延迟初始化行为。此外,`...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    1. **Spring Boot**: Spring Boot 是一个用于简化 Spring 应用程序初始搭建以及开发过程的框架。它预设了各种默认配置,使得开发者可以快速创建独立的、生产级别的基于 Spring 的应用程序。 2. **Eureka**: Spring ...

    spring bean的生命周期测试代码

    在Spring 4.2中,你可以通过`@Profile`注解来控制特定环境下的Bean激活,以及使用`@Lazy`注解延迟初始化Bean。测试代码可能包含了这些特性的使用示例,通过观察和运行代码,我们可以更好地理解这些功能的工作原理。 ...

    Spring_IOC详解.pdf

    这在一定程度上节省了资源,但同时也意味着延迟初始化可能导致的性能问题。 - **ApplicationContext**:相对于BeanFactory,ApplicationContext提供了更多的高级特性。它在启动时就会初始化所有单例Bean,避免了...

    Spring-4.3源码

    另外,`@Lazy`注解用于延迟初始化bean,直到真正被请求时才会创建。 在Web层,Spring MVC是Spring框架的重要组件。Spring 4.3对MVC进行了优化,包括更好的类型安全的模型绑定、增强的异常处理和视图解析。`@...

    spring笔记

    * BeanFactory:延迟加载,使用 bean 时才进行初始化 * ApplicationContext:加载配置文件时,初始化 bean 对象(立即加载) * ApplicationContext 还有其他功能: + 国际化处理 + 事件传递 + Bean 自动装配 + ...

    JAVA spring 系列案例50个和学习资料

    Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...

    spring学习指南

    - **1.2 延迟初始化(Lazy Initialization)**:Spring的ApplicationContext默认会在启动时初始化所有单例bean。但可以通过`lazy-init`属性设置为`true`,使bean在首次请求时才实例化,从而实现延迟初始化。 - **...

    第四章 Spring Bean基础1

    - **Lazy initialization mode**:是否延迟初始化,如果设置为 true,Bean 在第一次请求时才会实例化。 - **Initialization method**:Bean 初始化回调方法,容器在创建 Bean 后调用。 - **Destruction method**...

    spring集成socket服务

    我们可以实现`Lifecycle`接口或`SmartLifecycle`接口,以便在Spring容器启动完成后触发自定义的初始化操作,例如启动Socket服务器。 1. **集成Socket服务**:在Spring中集成Socket服务,我们通常会使用`java.net....

    Spring的IoC容器之BeanFactory[定义].pdf

    延迟初始化意味着在客户端真正需要使用某个对象时,BeanFactory才会对其进行初始化和依赖注入,这有助于减少启动时的资源消耗。 ApplicationContext则是BeanFactory的升级版,它不仅包含了BeanFactory的所有功能,...

    spring5.0.7 jar包

    5. **Spring Boot**:Spring 5.0.7与Spring Boot的兼容性更好,Spring Boot简化了Spring应用的初始化和配置,通过默认配置和起步依赖,让开发者可以快速启动项目。在这一版本中,Spring Boot的Actuator模块提供了更...

Global site tag (gtag.js) - Google Analytics