Spring bean生命周期

标签: spring bean 生命周期 | 发表时间:2013-11-25 23:40 | 作者:wangen2009
出处:http://www.iteye.com

Spring bean生命周期

      在传统的Java应用中,Bean的生命周期非常简单。 Java的关键词new用来实例化Bean(或许他是非序列化的)。这样就够用了。 相反,Bean的生命周期在Spring容器中更加细致。 理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程。 

 bean生命周期

1.容器寻找Bean的定义信息并且将其实例化。 

2.受用依赖注入,Spring按照Bean定义信息配置Bean的所有属性。 

3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。 

4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。 

5.如果BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()方法将被调用。 

6.如果Bean指定了init-method方法,它将被调用。 

7.最后,如果有BeanPsotProcessor和Bean关联,那么它们的postProcessAfterInitialization()方法将被调用。 

到这个时候,Bean已经可以被应用系统使用了,并且将被保留在Bean Factory中知道它不再需要。 

 

有两种方法可以把它从Bean Factory中删除掉。 

1.如果Bean实现了DisposableBean接口,destory()方法被调用。 

2.如果指定了订制的销毁方法,就调用这个方法。 

Bean在Spring应用上下文的生命周期与在Bean工厂中的生命周期只有一点不同, 唯一不同的是,如果Bean实现了ApplicationContextAwre接口,setApplicationContext()方法被调用。 

只有singleton行为的bean接受容器管理生命周期。 

non-singleton行为的bean,Spring容器仅仅是new的替代,容器只负责创建。 

 

对于singleton bean,Spring容器知道bean何时实例化结束,何时销毁, Spring可以管理实例化结束之后,和销毁之前的行为,管理bean的生命周期行为主要未如下两个时机: 

Bean全部依赖注入之后 

Bean即将销毁之前 

 

1)依赖关系注入后的行为实现: 

有两种方法:A.编写init方法  B.实现InitializingBean接口 

afterPropertiesSet和init同时出现,前者先于后者执行,使用init方法,需要对配置文件加入init-method属性 

2)bean销毁之前的行为 

有两种方法:A.编写close方法  B.实现DisposableBean接口 

destroy和close同时出现,前者先于后者执行,使用close方法,需要对配置文件加入destroy-method属性 

 总体上分只为四个阶段  

 1. BeanFactoyPostProcessor实例化  

 2. Bean实例化,然后通过某些BeanFactoyPostProcessor来进行依赖注入  

 3. BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor  

 4.Bean销毁阶段 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [spring bean 生命周期] 推荐:

Spring bean生命周期

- - 开源软件 - ITeye博客
Spring bean生命周期.       在传统的Java应用中,Bean的生命周期非常简单.  Java的关键词new用来实例化Bean(或许他是非序列化的).  相反,Bean的生命周期在Spring容器中更加细致.  理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程.

spring中Bean的生命周期总结

- - CSDN博客推荐文章
spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结.  Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在ApplicationContext和BeanFactory中Bean的生命周期.

Spring两种加载创建spring bean配置文件的方式

- - ITeye博客
基于spring做bean的管理,基于web开发时有两种加载配置文件创建bean的方式. 第一种基于DispatcherServlet的init-param:. 第二种基于ContextLoaderListener:. PS:如果两种方式都采用了那么spring容器中会维护两套bean,如果有调度,定时任务等那么会重复执行.

Java中如何获取Spring中配置的bean

- - CSDN博客推荐文章
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 二、如何在程序中获取Spring配置的bean呢. 方法一:在初始化时保存ApplicationContext对象. 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况.

使用Java注解进行Spring bean管理

- - 编程语言 - ITeye博客
原文链接: http://www.ibm.com/developerworks/cn/webservices/ws-springjava/. 使用 Java 配置进行 Spring bean 管理. 学习使用 Java 配置管理 Spring bean. Spring bean 是使用传统的 XML 方法配置的.

Spring单例Bean和线程安全 - duanxz - 博客园

- -
Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢. 例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框架之后,每个Action都是单例的,那么对于Spring托管的单例Service Bean,如何保证其安全呢.

spring bean 不使用注入的方式获取的两种方式

- - 开源软件 - ITeye博客
非注入方式取得spring注入bean的util类实现. 第一种,我用在webservice接口中. * 通过spring配置文件中配置的bean id取得bean对象. * @param id spring bean ID值. * @return spring bean对象. 实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入ApplicationContext的实例.

Activity生命周期详解

- - 编程语言 - ITeye博客
本文概述:针对一个例子详细阐述Activity的生命周期. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫返回栈(Back Stack). 每次我们启动一个新的Activity,这个Activity就会入栈,并处于栈顶位置. 按下返回键或者finish()方法销毁一个Activity时,处于栈顶的Activity就会出栈,另一个Activity就会处于栈顶位置,显示给用户的就会是这个Activity..

敏捷应用生命周期管理

- - 博客 - 伯乐在线
Agile ALM使用敏捷的价值观和策略来充实了ALM,ALM的敏捷做法提升了产品的质量,缩短了上市时间,且有利于开发者以一种更加愉悦的心情来工作. 我对Agile ALM的定义可归结为,一些灵活的、对改变持开发态度的、高质量的过程和工具链. 敏捷应用生命周期管理(Agile Application Lifecycle Management,Agile ALM)正得到越来越大的推动,记得我在撰写“Agile ALM”一书的书稿时,几乎没有人会想到使用敏捷来丰富ALM的做法,或是找出一种有实效的ALM做法,越来越多的工具厂商发现,他们的工具在贴上敏捷工具甚至是敏捷ALM工具的标签之后好卖多了.

Activity的生命周期方法

- - 移动开发 - ITeye博客
一:Activity的生命周期方法.  Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等. 这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等. 这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法.