0 0

Spring Bean延迟实例化是什么意思5

  最近回顾知识,看到Spring Bean延迟实例化这个概念,发现有点不甚理解,还请高手们指教一番,谢谢!
2014年10月29日 11:18

4个答案 按时间排序 按投票排序

0 0

采纳的答案

如果看控制台输出,你会发现在启动时候spring输出很多信息,其中就有初始化BEAN。延迟初始化就是不在这时候初始化。在你第一次使用的时候才创建然后交给spring管理。

2014年10月29日 16:51
0 0

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>

2014年10月31日 22:39
0 0

spring初始化的时候只会实例化单例与非延迟加载(lazy-init="true")的对象。其他的对象是在调用getBean的时候进行实例化。

2014年10月30日 17:21
0 0

spring的bean在ioc容器初始化的时候默认是不实例化的哦~而是在第一次真正使用的时候才会初始化

2014年10月29日 12:13

相关推荐

    Spring实例化Bean顺序

    在Spring框架中,Bean的实例化顺序是一个关键概念,它涉及到如何管理和协调多个Bean的创建与依赖关系。这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 ...

    Spring 延迟实例化

    在Spring中配置一个bean为延迟实例化非常简单,只需要在`&lt;bean&gt;`元素中添加`lazy-init`属性并设置其值为`true`即可。例如: ```xml &lt;bean id="lazyBean" class="com.example.LazyBean" lazy-init="true"&gt; &lt;!-- ...

    spring bean life cycle

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

    spring bean 属性总结

    - **abstract属性**:如果设置为`true`,则该Bean仅作为其他Bean的抽象模板,不能被直接实例化。 - **parent属性**:允许继承另一个Bean的属性。这对于共享一些通用配置非常有用。 - **autowire属性**:控制Bean的...

    spring bean的生命周期测试代码

    1. **实例化**:Spring容器通过`Class`对象或`FactoryBean`来创建Bean的实例。如果定义了`@PostConstruct`注解的方法,这个方法会在Bean实例化后但初始化前执行。 2. **属性注入**:Spring会根据Bean定义中的依赖...

    Spring Bean生命周期&BeanDefinitions1

    根据`&lt;bean&gt;`标签中的`class`属性,Spring确定Bean的类型并进行实例化。 2. **属性注入**:接着,Spring会利用依赖注入(Dependency Injection,DI)填充Bean的所有属性。这可以通过构造器注入、setter注入或属性...

    第四章 Spring Bean基础1

    - **实例化**:Spring 根据 BeanDefinition 创建 Bean 实例,可能涉及构造器注入和属性设置。 - **初始化**:包括调用初始化方法,执行 Bean 生命周期中的其他初始化逻辑。 7. **延迟初始化与销毁**: - **延迟...

    Spring中与Bean相关的接口

    `BeanFactory`提供了一个延迟初始化Bean的能力,这意味着Bean只在真正被请求时才会被实例化,这有助于提高应用的启动速度。例如,当使用`XmlBeanFactory`从XML配置文件加载Bean定义时,`BeanFactory`会解析并加载...

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

    这个方法的主要任务包括设置转换服务、处理LoadTimeWeaverAware类型的Bean、停止使用临时类加载器、冻结配置以及预实例化所有非延迟加载的单例Bean。 1. **转换服务初始化**: 如果容器中存在名为`CONVERSION_...

    Spring動態加載Bean

    在Spring中,Bean的生命周期包括实例化、初始化、正常服务和销毁等阶段。通常,Spring容器会在应用启动时扫描配置文件,创建并初始化所有定义的Bean。然而,通过动态加载,我们可以避免不必要的初始化,直到真正需要...

    spring学习之路(黑马课程笔记)

    Spring学习之路(黑马课程...Spring学习之路是指通过学习Spring框架来掌握IOC反转控制的关键技术,并且学习Bean的创建和管理、Bean的作用域、Bean的实例化方式、Bean的延迟加载、Bean的初始化函数和销毁函数等知识点。

    Spring实例化bean的方式代码详解

    `BeanFactory`是Spring的基本容器,它在调用`getBean()`方法时才实例化bean,实现延迟加载。如果bean的依赖无法注入,此时才会抛出异常。相比之下,`ApplicationContext`在初始化时会实例化所有bean,除非你通过`...

    浅谈spring容器中bean的初始化

    默认情况下,如果未明确指定`scope`属性,Bean的默认作用域是`singleton`,这意味着Spring容器会创建一个共享的实例,并在容器启动时或首次请求时初始化这个实例。在示例代码中,通过`ApplicationContext`获取到的`...

    JavaEE spring实例工厂的实例方式

    本篇将深入探讨Spring中的实例工厂(Instance Factory)的实例化方式,以及如何在实际应用中运用。 首先,我们需要理解什么是实例工厂。在Spring框架中,实例工厂是一种创建对象的方式,它允许我们自定义对象的创建...

    Spring的Bean配置说明

    - **`abstract`属性**:如果设置为`true`,表示这是一个抽象Bean,不能被实例化。主要用于定义共有的配置,子Bean可以继承这些配置。例如,定义一个日志级别的抽象配置,然后由具体的服务Bean继承这些配置。 - **`...

    java-spring整合

    * 使用 @Lazy 注解来延迟 Bean 的实例化 * 使用 @Profile 注解来指定 Bean 的激活 Profile 七、 结论 Java-Spring 整合可以帮助开发人员快速地开发企业级应用程序。通过使用 Spring 框架,开发人员可以简化开发...

    二、Spring源码分析——BeanFactory

    1. **对象的创建**:BeanFactory能够根据配置信息创建bean实例,支持延迟加载(lazy-init),只有在真正需要时才会实例化bean。 2. **依赖注入**:BeanFactory可以根据bean之间的依赖关系,自动装配bean的属性,无需...

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    `@Bean`可以包含额外的配置,如`@Lazy`(表示延迟初始化)、`@Profile`(环境特定的bean)等。 在`@Autowired`注入时的顺序如下: 1. **类型匹配**:Spring首先尝试按类型匹配bean,找到最适合的bean注入到目标...

    spring 定时器的使用实例

    本实例将详细介绍如何在Spring中使用Quartz作为定时器。 首先,Quartz是一个功能强大的开源作业调度框架,它允许应用程序定义和调度任务,以便在特定时间执行。Spring与Quartz的集成使得在Spring应用中管理定时任务...

    Spring高级篇二.pdf

    - **BeanFactory**: 这是Spring框架中最基础的容器接口,提供了Bean的实例化、依赖注入等功能。它的特点是延迟加载,即只有当第一次通过`getBean`方法请求某个Bean时,才会创建该Bean的实例。 - **...

Global site tag (gtag.js) - Google Analytics