ZZ SPRING中BEAN的生命周期

 

这是一篇转载,原文来自于 http://www.blogjava.net/huxiaowi/archive/2009/06/23/283775.html?opt=admin

作者是 Charleehu

 

 

spring 中,从 BeanFactory ApplicationContext 取得的实例为 Singleton ,也就是预设为每一个 Bean 的别名只能维持一个实例,而不是每次都产生
一个新的对象
使用 Singleton 模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全 (Thread-safe) 的议题,防止多个线程
同时存取共享资源所引发的数据不同步问题。
然而在 spring 可以设定每次从 BeanFactory ApplicationContext 指定别名并取得 Bean 时都产生一个新的实例:例如:
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" singleton="false">
spring 中, singleton 属性默认是 true ,只有设定为 false ,则每次指定别名取得的 Bean 时都会产生一个新的实例

一个 Bean 从创建到销毁,如果是用 BeanFactory 来生成 , 管理 Bean 的话,会经历几个执行阶段:
    1
Bean 的建立:
         
BeanFactory 读取 Bean 定义文件,并生成各个 Bean 实例
    2
:属性注入:
         
执行相关的 Bean 属性依赖注入
    3
BeanNameAware setBeanName()
         
如果 Bean 类有实现 org.springframework.beans.BeanNameAware 接口,则执行它的 setBeanName() 方法
    4
BeanFactoryAware setBeanFactory()
         
如果 Bean 类有实现 org.springframework.beans.factory.BeanFactoryAware 接口,则执行它的 setBeanFactory() 方法
    5
BeanPostProcessors ProcessBeforeInitialization()
         
如果任何的 org.springframework.beans.factory.config.BeanPostProcessors 实例与 Bean 实例相关。则执行 BeanPostProcessors 实例
         
processBeforeInitialization() 方法
    6
initializingBean afterPropertiesSet()
         
如果 Bean 类已实现 org.springframework.beans.factory.InitializingBean 接口,则执行他的 afterProPertiesSet() 方法
    7
Bean 定义文件中定义 init-method
         
可以在 Bean 定义文件中使用 "init-method" 属性设定方法名称例如:
          <bean id="helloBean" calss="onlyfun.caterpillar.HelloBean" init-method="initBean">
         
如果有以上设置的话,则执行到这个阶段,就会执行 initBean() 方法
    8
BeanPostProcessors ProcessaAfterInitialization()
         
如果有任何的 BeanPostProcessors 实例与 Bean 实例关联,则执行 BeanPostProcessors 实例的 ProcessaAfterInitialization() 方法
    9
DisposableBean destroy()
         
在容器关闭时,如果 Bean 类有实现 org.springframework.beans.factory.DisposableBean 接口,则执行他的 destroy() 方法
    10
Bean 定义文件中定义 destroy-method
         
在容器关闭时,可以在 Bean 定义文件中使用 "destroy-method" 属性设定方法名称,例如:
          <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" destroy-method="destroyBean">
         
如果有以上设定的话,则进行至这个阶段时,就会执行 destroyBean() 方法,如果是使用 ApplicationContext 来生成并管理 Bean 的话则稍有不同,使用 ApplicationContext 来生成及管理 Bean 实例的话,在执行 BeanFactoryAware setBeanFactory() 阶段后,若 Bean 类上有实现 org.springframework.context.ApplicationContextAware 接口,则执行其 setApplicationContext() 方法,接着才执行 BeanPostProcessors ProcessBeforeInitialization() 及之后的流程

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值