Kela's Blog

            前面的路很坎坷,但毕竟是条路.也许走过这一段就会发现,走过去就是梦想中的地方.因此坚持成为此刻唯一能做且必须去做的事情.
posts - 9, comments - 27, trackbacks - 0, articles - 15

kela的笔记 应用程序框架 ---- spring(5)

Posted on 2006-08-23 17:36 Kela 阅读(291) 评论(0)  编辑  收藏 所属分类: 我的笔记(Spring)

摘要:Bean的生命周期。一个Bean从建立到销毁,如果是使用BeanFactory来生成,管理Bean的话,会经历几个执行阶段。

 

     Bean 的建立

 

BeanFactory读取Bean定义文件,并生成各个Bean实例。

Spring中,默认取得的实例为Singleton模式,即每一次context.getBean(“beanName”)取得的对象都是同一个,而不是每次都产生一个新的对象。大部分情况下Singleton是能够满足要求的,如果考虑到线程安全等的问题,需使用Prototype模式,即每次取得的对象都是一个独立的对象,只需要将singleton=”false”即可。

 

如:

 

<bean id= "someBean" class= "com.kela.spring.ioc.SomeBean" singleton= "false" >

 

     属性注入

 

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

     BeanNameAware setBeanName()

 

如果Bean类有实现org.springframework.beans.factory.BeanNameAware接口,则执行它的setBaenName()方法。

实现BeanNameAware接口的Bean类,在依赖关系设定完成后,初始化方法之前,将Bean的定义文件中的名称设定给Bean

 

注:Spring中提供了一些Aware相关接口,实现这些Aware接口的Bean类在被初始化之后,可以取得一些Spring所提供的资源或使用某些功能。

一旦实现了提供的相关接口,则应用程序就会使用到Spring的相关API,而与Spring产生耦合关系。

     BeanFactoryAware setBeanFactory()

 

如果bean类有实现org.springframework.beans.factory.BeanFactoryAware接口,则执行它的setBeanFactory

实现BeanFactoryAware接口的Bean类,在依赖关系设定完成后,初始化方法之前,Spring容器将会注入BeanFactory的实例。

     BeanPostProcessor postProcessBeforeInitialization()

 

如果任何的org.springfaramwork.beans.factory.config.BeanPostProcessor实例与Bean实例关联,则执行BeanPostProcessors实例的postProcessBeforeInitialization()方法。

     InitializingBean afterPropertiesSet()

 

如果Bean类以实现org.springfaramwork.beans.factory.InitializingBean接口,则执行它的afterPropertiesSet()方法。

     Bean 定义文件中定义init-method

 

可以在Bean定义文件使用“init-method”属性设定方法名称,例如:

 

<bean id= "someBean" class= "com.kela.spring.ioc.SomeBean" init-method= "initBean" >

 

如果有以上设定的话,则进行至这个阶段时,就会执行initBean()方法。

     BeanPostProcessor postProcessAfterInitialization()

 

如果任何的org.springfaramwork.beans.factory.config.BeanPostProcessor实例与Bean实例关联,则执行BeanPostProcessors实例的postProcessAfterInitialization()方法。

     DisposableBean destroy()

 

在容器关闭时,如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。

     Bean 定义文件中定义destroy-method

 

在容器关闭时,可以在Bean定义文件中使用“destroy-method”属性设定方法名称,例如:

<bean id= "someBean" class= "com.kela.spring.ioc.SomeBean" destroy-method= "destroyBean" >

 

如果有以上设定的话,则进行至这个阶段时,就会执行destroyBean()方法。

 

注意:如果是使用ApplicationContext来生成并管理Bean的话则稍有不同,使用ApplicationContext来生成及管理Bean实例的话,在执行BeanFactoryAwaresetBeanFactory()阶段之后,若Bean类上有实现org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext()方法,接着才继续进行BeanPostProcessorpostProcessBeforeInitialization()及之后的流程。


只有注册用户登录后才能发表评论。


网站导航:
 
分享到: