4个答案 按时间排序 按投票排序
-
采纳的答案
如果看控制台输出,你会发现在启动时候spring输出很多信息,其中就有初始化BEAN。延迟初始化就是不在这时候初始化。在你第一次使用的时候才创建然后交给spring管理。
2014年10月29日 16:51
-
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
-
spring初始化的时候只会实例化单例与非延迟加载(lazy-init="true")的对象。其他的对象是在调用getBean的时候进行实例化。
2014年10月30日 17:21
相关推荐
在Spring框架中,Bean的实例化顺序是一个关键概念,它涉及到如何管理和协调多个Bean的创建与依赖关系。这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 ...
在Spring中配置一个bean为延迟实例化非常简单,只需要在`<bean>`元素中添加`lazy-init`属性并设置其值为`true`即可。例如: ```xml <bean id="lazyBean" class="com.example.LazyBean" lazy-init="true"> <!-- ...
例如,我们可以设置`lazy-init`属性使Bean延迟初始化,直到它被实际使用时才会被实例化。`scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活...
- **abstract属性**:如果设置为`true`,则该Bean仅作为其他Bean的抽象模板,不能被直接实例化。 - **parent属性**:允许继承另一个Bean的属性。这对于共享一些通用配置非常有用。 - **autowire属性**:控制Bean的...
1. **实例化**:Spring容器通过`Class`对象或`FactoryBean`来创建Bean的实例。如果定义了`@PostConstruct`注解的方法,这个方法会在Bean实例化后但初始化前执行。 2. **属性注入**:Spring会根据Bean定义中的依赖...
根据`<bean>`标签中的`class`属性,Spring确定Bean的类型并进行实例化。 2. **属性注入**:接着,Spring会利用依赖注入(Dependency Injection,DI)填充Bean的所有属性。这可以通过构造器注入、setter注入或属性...
- **实例化**:Spring 根据 BeanDefinition 创建 Bean 实例,可能涉及构造器注入和属性设置。 - **初始化**:包括调用初始化方法,执行 Bean 生命周期中的其他初始化逻辑。 7. **延迟初始化与销毁**: - **延迟...
`BeanFactory`提供了一个延迟初始化Bean的能力,这意味着Bean只在真正被请求时才会被实例化,这有助于提高应用的启动速度。例如,当使用`XmlBeanFactory`从XML配置文件加载Bean定义时,`BeanFactory`会解析并加载...
这个方法的主要任务包括设置转换服务、处理LoadTimeWeaverAware类型的Bean、停止使用临时类加载器、冻结配置以及预实例化所有非延迟加载的单例Bean。 1. **转换服务初始化**: 如果容器中存在名为`CONVERSION_...
在Spring中,Bean的生命周期包括实例化、初始化、正常服务和销毁等阶段。通常,Spring容器会在应用启动时扫描配置文件,创建并初始化所有定义的Bean。然而,通过动态加载,我们可以避免不必要的初始化,直到真正需要...
Spring学习之路(黑马课程...Spring学习之路是指通过学习Spring框架来掌握IOC反转控制的关键技术,并且学习Bean的创建和管理、Bean的作用域、Bean的实例化方式、Bean的延迟加载、Bean的初始化函数和销毁函数等知识点。
`BeanFactory`是Spring的基本容器,它在调用`getBean()`方法时才实例化bean,实现延迟加载。如果bean的依赖无法注入,此时才会抛出异常。相比之下,`ApplicationContext`在初始化时会实例化所有bean,除非你通过`...
默认情况下,如果未明确指定`scope`属性,Bean的默认作用域是`singleton`,这意味着Spring容器会创建一个共享的实例,并在容器启动时或首次请求时初始化这个实例。在示例代码中,通过`ApplicationContext`获取到的`...
本篇将深入探讨Spring中的实例工厂(Instance Factory)的实例化方式,以及如何在实际应用中运用。 首先,我们需要理解什么是实例工厂。在Spring框架中,实例工厂是一种创建对象的方式,它允许我们自定义对象的创建...
- **`abstract`属性**:如果设置为`true`,表示这是一个抽象Bean,不能被实例化。主要用于定义共有的配置,子Bean可以继承这些配置。例如,定义一个日志级别的抽象配置,然后由具体的服务Bean继承这些配置。 - **`...
* 使用 @Lazy 注解来延迟 Bean 的实例化 * 使用 @Profile 注解来指定 Bean 的激活 Profile 七、 结论 Java-Spring 整合可以帮助开发人员快速地开发企业级应用程序。通过使用 Spring 框架,开发人员可以简化开发...
1. **对象的创建**:BeanFactory能够根据配置信息创建bean实例,支持延迟加载(lazy-init),只有在真正需要时才会实例化bean。 2. **依赖注入**:BeanFactory可以根据bean之间的依赖关系,自动装配bean的属性,无需...
`@Bean`可以包含额外的配置,如`@Lazy`(表示延迟初始化)、`@Profile`(环境特定的bean)等。 在`@Autowired`注入时的顺序如下: 1. **类型匹配**:Spring首先尝试按类型匹配bean,找到最适合的bean注入到目标...
本实例将详细介绍如何在Spring中使用Quartz作为定时器。 首先,Quartz是一个功能强大的开源作业调度框架,它允许应用程序定义和调度任务,以便在特定时间执行。Spring与Quartz的集成使得在Spring应用中管理定时任务...
- **BeanFactory**: 这是Spring框架中最基础的容器接口,提供了Bean的实例化、依赖注入等功能。它的特点是延迟加载,即只有当第一次通过`getBean`方法请求某个Bean时,才会创建该Bean的实例。 - **...