在Spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只维持一个实例。
使用Singletion模式产生单一实例,对单线程的程序来说并不会有什么问题,当对于多线程的程序,必须注意到线程安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引起的数据不同步问题。
然而Spring中,可以设定每次从BeanFactory或ApplicationContext指定别名并取得Bean时产生一个新的实例,例如:
.................
singleton="false"[/b]>
.................
"singleton"属性预设是"true",藉由将其设定为"false",则每次指定别名来取得Bean时都产生一个新的实例。
一个Bean从建立到销毁,如果是使用BeanFacotory来生成,管理Bean的话,会经历几个执行阶段:
- Bean的建立 (由BeanFactory读取Bean定义文件,并生成各个Bean实例)
- 属性注入 (执行相关的Bean属性依赖注入)
- BeanNameAware的setBeanName() (如果Bean类由实现org.springframework.beans.factory.BeanNameAware接口,则执行它的setBeanName()方法。)
- BeanFactoryAware的setBeanFactory() (如果Bean类由实现org.springframework.beans.factory.BeanFactoryAware接口,则执行它的setBeanFactory()方法。)
- BeanPostProcessors的processBeforeInitialization() (如果任何的org.springframework.beans.factory.cofig.Bean.PostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例的processBeforeInitialization()方法)
- initializingBean的afterpropertiesSet() (如果Bean类由实现org.springframework.beans.factory.initializingBean接口,则执行它的afterpropertiesSet()方法.)
- Bean定义文件中定义init-method (可以在Bean定义文件使用"init-method"属性设定方法名称。例如:.如果有以上设定的话,则进行至这个阶段时,就会执行init-method指定的方法。)
- BeanPostProcessors的processaAfterInitialization() (如果任何的org.springframework.beans.factory.cofig.Bean.BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例的processaAfterInitialization()方法)
- DisposableBean的destory() (在容器关闭时,如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行它的destory()方法)
- Bean定义文件中定义destory-method () (在容器关闭时,可以在Bean定义文件中使用"desotry-method"属性设定方法名称。如:,若有以上设定,则在这个阶段,就会执行destory-method指定的方法。)
========================================
如果是使用ApplicationContext来生成并管理Bean的话则稍有不同,在执行BeanFactoryAware的setBeanFactory阶段之后,若Bean类有实现org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext方法,接着继续进行BeanPostProcessors的processBeforeInitialization()及之后的流程。
分享到:
相关推荐
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
Spring bean生命周期demo
SpringBean的生命周期.mdj
Springbean生命周期
此资源是我的博客bean的生命周期的测试代码,只有源代码,没有相关库文件,环境是spring4.2 ,
Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的...
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个...
这个工程主要实现了: Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)
介绍了Spring的Bean周期,容器周期,工厂周期,运行代码后可以看到运行结果
四份资料介绍Spring Bean 的生命周期,从认识,熟悉,深究,记忆Spring Bean。希望这份资料能帮助你!
Spring管理的Bean的生命周期
Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。这篇文章主要介绍了Spring Bean 生命周期,需要的朋友可以参考下
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
摘录了spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP,资源加载器,事件监听器,类型转换,容器扩展点,bean生命周期和作用域,应用某些等核心功能。 如果本项目能帮助到你,请给个STAR,谢谢...
Spring生命周期流程
提取了Spring的核心逻辑,极大地简化了代码,并完善了Spring的核心功能,例如IoC和AOP,资源加载器,事件侦听器,类型转换,容器扩展点,Bean生命周期和作用域以及应用程序上下文,被保留。 如果这个项目可以为您...
Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBean()获取bean对象及设置对象属性时,Spring框架做了哪些事。Bean的生命周期从Spring容器实例化Bean到销毁Bean。 本文分别对 BeanFactory 和 ...
1、<bean>标签主要用来进行Bean定义; 2、alias用于定义Bean别名的; 3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml...
一般情况下,我们只是关心如何正确地将Bean装配到容器中,并不关心Ioc容器是如何装配和销毁Bean的过程。但是恰恰有时候,我们需要自定义初始化或销毁Bean的过程,以满足一些“特殊的”需求。比如,数据源在关闭的...