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>
分享到:
相关推荐
- **lazy-init属性**:控制Bean的延迟加载。如果设置为`true`,Bean会在第一次调用时才实例化。 - **init-method属性**:指定Bean初始化方法,通常用于资源的初始化。 - **destroy-method属性**:指定Bean销毁方法...
Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...
在Spring 4.2中,你可以通过`@Profile`注解来控制特定环境下的Bean激活,以及使用`@Lazy`注解延迟初始化Bean。测试代码可能包含了这些特性的使用示例,通过观察和运行代码,我们可以更好地理解这些功能的工作原理。 ...
Spring的BeanDefinition是用来存储Bean的配置信息,包括Bean的类名、作用域、属性值、依赖的其他Bean、是否为单例、是否延迟加载等。这些信息在容器启动时解析并转化为BeanDefinition对象,后续的Bean实例化和管理都...
在Spring框架中,动态加载Bean是一项重要的功能,它允许我们在运行时根据需要加载或卸载Bean,而不是在应用启动时一次性加载所有Bean。这对于处理不同环境、减少内存占用或者实现按需服务的情况非常有用。本篇文章将...
Spring框架的延迟加载和声明式事务处理是两个关键特性,它们极大地简化了企业级应用的开发。延迟加载允许在需要时才加载关联的对象,而声明式事务处理则使得事务管理更加自动化,无需在代码中显式处理。 在Spring与...
`BeanFactory`提供了一个延迟初始化Bean的能力,这意味着Bean只在真正被请求时才会被实例化,这有助于提高应用的启动速度。例如,当使用`XmlBeanFactory`从XML配置文件加载Bean定义时,`BeanFactory`会解析并加载...
SpringBean 循环依赖问题与解决方案 SpringBean 循环依赖问题是指在 Spring 框架中,多个 Bean 之间存在相互依赖关系,导致 Bean 创建失败或无法正确注入的问题。这种问题常见于大型项目中,特别是在复杂的业务系统...
- **`lazy-init`属性**:控制Bean是否在初始化阶段延迟加载。默认情况下,单例Bean会在容器启动时初始化,但如果设置了`lazy-init="true"`,则Bean会在第一次请求时才初始化。 - **初始化与销毁方法**: - **`...
在Spring中配置一个bean为延迟实例化非常简单,只需要在`<bean>`元素中添加`lazy-init`属性并设置其值为`true`即可。例如: ```xml <bean id="lazyBean" class="com.example.LazyBean" lazy-init="true"> <!-- ...
1. **对象的创建**:BeanFactory能够根据配置信息创建bean实例,支持延迟加载(lazy-init),只有在真正需要时才会实例化bean。 2. **依赖注入**:BeanFactory可以根据bean之间的依赖关系,自动装配bean的属性,无需...
在Spring框架中,Bean的初始化是其生命周期中的关键步骤,特别是在单例模式下,Spring容器会确保在应用程序启动时创建并初始化所有非延迟加载的单例Bean。在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的...
实在跟之前的项目5秒相差太大,终于忙过一段,抽空找了原因,原来是正向生成时Update表花了一半时间,手动去掉后为25秒左右,又去除了二级缓存,相差不大,快了可能有1秒,之后去除spring加载bean时扫描的部分文件,...
Spring学习之路(黑马课程...Spring学习之路是指通过学习Spring框架来掌握IOC反转控制的关键技术,并且学习Bean的创建和管理、Bean的作用域、Bean的实例化方式、Bean的延迟加载、Bean的初始化函数和销毁函数等知识点。
BeanFactory会延迟加载bean,只有在需要时才会实例化。 【ApplicationContext】ApplicationContext是Spring的高级容器,提供了更多特性,如加载文件资源、处理文本信息解析(包括国际化)、以及向监听器发送事件的...
它的特点是延迟加载,即只有当第一次通过`getBean`方法请求某个Bean时,才会创建该Bean的实例。 - **ApplicationContext**: 它继承自`BeanFactory`,提供了更多的功能和服务。如资源访问、事务管理、消息服务等,...
相比于BeanFactory,ApplicationContext在启动时会主动初始化所有单例Bean,这使得从ApplicationContext中获取Bean更为高效,因为不需要等待延迟加载的过程。 ApplicationContext有三个常见的子类,分别是...
但有时Bean的创建可能会被延迟到第一次使用时,这称为懒加载。 1.4.5 自动装配依赖 Spring容器可以根据类型或名称自动装配Bean之间的依赖关系,这种方式可以减少配置工作量,但有时候也会引起问题。 1.4.6 方法...
BeanFactory是Spring的基本容器,采用延迟加载策略,只有在调用`getBean`方法时才会初始化Bean。而ApplicationContext不仅包含了BeanFactory的所有功能,还支持国际化、事件广播、资源加载等功能,并且在启动时就...