Bean的生命周期

Spring中Bean的生命周期
原文地址:Bean的生命周期 作者:bearfight

一个Bean从建立到销毁,会历经几个执行阶段,如果使用BeanFactory来生成、管理Bean,

会尽量支持以下的生命周期。

@Bean的建立
由BeanFactory读取Bean定义文件,并生成各个Bean实例。

@属性注入
执行相关的Bean属性依赖注入

@BeanNameAware的setBeanName()
org.springframework.beans.factory.BeanNameAware

@BeanFactoryAware的setBeanFactory()
org.springFramework.beans.factory.BeanFactoryAware

@BeanPostProcessors的processBeforeInitialization()
org.springFramework.beans.factory.config.BeanPostProcessors

@InitializiongBean的afterPropertiesSet()
org.springframework.beans.factory.InitializingBean

@Bean定义文件中定义init-method
use "init-methd" to set method name e.g:
...
<bean id="helloBean" class="org.bearfly.bean.HelloBean" init-

method="initBean">
...
当代码运行到这个阶段的时候,就是执行initBean方法。

@BeanPostProcessors的processaAfterInitialization()
如果有任何的BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessor实例

的processaAfterInitialization()方法。

@DisposableBean的destroy()
容器关闭 org.springframework.beans.factory.DisposableBean

@Bean定义文件中定义destroy-method
...
<bean id="helloBean" class="org.bearfly.bean.HelloBean" destroy-

method="destroyBean">
...


如果使用ApplicationContext来生成并管理Bean,在执行BeanfactoryAware的

setBeanFactory()阶段之后,若Bean类上有实现

org.springframework.context.ApplicationContextAware接口,则执行

setApplicationContext()方法,接着才继续进行BeanPostProcessors的

processBeforeInitialization()及之后的流程。

在非WEB应用程序中,若想在关闭容器之前调用Bean定义文件中Singleton的Bean所设置的

destroy方法,则可以执行AbstractApplicationContext的registerShutdownHook()方

法,并向JVM注册相关方法,例如:
AbstractApplicationContext context = new ClassPathXmlApplicationContext

("beans-config.xml");
...
context.registerShutdownHook();
//执行应用程序

在应用程序结束之前,Bean定义文件上所设置的destroy方法将会被调用执行。
如果使用BeanFactory,只有在使用getBean()方法真正取得Bean时,才会做实例化的动

作.如果使用ApplicationContext,则会预先针对Bean定义文件的内容,将所有的Bean实

例化。如果这不是你想要的,刚可以在<bean>上设置"lazy-init"属性

为"true,ApplicationContext 就不会在启动的时候针对该Bean作实例化的动作,例如:
<bean id="some" class="org.bearfly.bean.Some lazy-init="true">
...
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值