问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java spring框架中,bean的生命周期是怎么样的?请形象的描述一下!

发布网友 发布时间:2022-05-15 22:20

我来回答

2个回答

热心网友 时间:2024-02-28 12:03

Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。

    下面以BeanFactory为例,说明一个Bean的生命周期活动:

Bean的建立

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

Setter注入

      执行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.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。

InitializingBean的afterPropertiesSet()

      如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。

Bean定义文件中定义init-method

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


<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">
  .......
 </bean>

   


      这时会执行initMethod()方法,注意,这个方法是不带参数的。

BeanPostProcessors的processAfterInitialization()

      容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。

DisposableBean的destroy()

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

Bean定义文件中定义destroy-method

      在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法


<bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">
  .......
</bean>

   


       这时会执行destroyMethod()方法,注意,这个方法是不带参数的。

   以上就是BeanFactory维护的一个Bean的生命周期。下面这个图可能更直观一些:



  如果使用ApplicationContext来维护一个Bean的生命周期,则基本上与上边的流程相同,只不过在执行BeanNameAware的setBeanName()后,若有Bean类实现了org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext()方法,然后再进行BeanPostProcessors的processBeforeInitialization()

   实际上,ApplicationContext除了向BeanFactory那样维护容器外,还提供了更加丰富的框架功能,如Bean的消息,事件处理机制等。

热心网友 时间:2024-02-28 12:04

Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean。

Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法。

Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法。

容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。

工厂后处理器接口方法:这个包括了AspectJWeavingEnabler,ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器  接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

参考资料

生命周期.bean[引用时间2018-1-9]

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
奥迪a6l怎么用手机连接音响放歌,我的是华为 奥迪a6l蓝牙连接了,听歌没声音 2009年6月在农业银行办理30万等额本息为10年的商业房贷,7折,现在月供... 存量房贷七折七折政策 ...在农业银行贷款27万,等额本息打七折利率按揭20年,现在的利率每月应还... 我是第一套房,在农业银行不是公积金贷款27万元20年付清利息怎么算法... 在成都交通违章网上怎么办理的 成都违章罚款网上怎么交 成都交通违章罚款在哪里交 成都违章停车可以网上交罚款吗 车贷卡逾期暂停使用在那个软件还款 又是关于CSS的基础问题,派生选择器的问题。老实说吧,我只明白选择器,对... oqqoR11t是全网通吗? 梦见梳子梳头&#39; 摘荔枝有什么技巧 摘荔枝为什么不穿鞋? 休息佐一日听日又要去摘荔枝了翻译为广东话 高德导航设置卫星地图收费吗? 修缮与修理修配是缴纳营业税还是增值税? 三星NOTE3手机(行货),充电正常,充好后手机电池发热机身也发热,待机状态下很快就降到76%了。怎么回事。 高德导航不要钱为什么? 三星note2手机,充电时发烫,充电时没有玩手机,没有后台程序,是什么原因? 三星note4升级固件6.0后严重发热,而且掉电非常快怎么解决? 三星note3入手才20天,待机状态下总是发热、很费电,怎么解决呢? 汕头假体隆鼻会不会有副作用 假体隆鼻有副作用大吗? 刘彦军假体隆鼻有什么副作用 逻辑的主要类型有哪些? 逻辑类型论的介绍 请问这种螺丝怎么拧开?海尔洗衣机的转盘。一字,十字螺丝刀,电动螺丝刀都试了,纹丝不动。 bean生命周期的4个阶段是什么? bean的生命周期是什么意思? 三星note 3支持电信4g吗 三星note3电信版支持4g网络吗 小米note3支持联通,电信4G+吗? 三星note3电信4g卡能用吗 红米note3全部都是4G的吗? 红米note3可以用电信4G吗 note3电信版支持4g网络吗 国家食品安全认证标志 红米note 3 全网通版 电信和联通4g吗 魅蓝note3电信版支持移动4g吗 电信版三星note3 n9009到底支不支持电信4g 红米note3支持电信800M的4G网络吗 电信note3支持4G网络吗? 红米note 3 全网通版可以使用电信和联通4g吗 腿部太粗了,怎么减呢? 如何测定一种固体有机物(常温)在另一种有机溶剂中的溶解度?如邻二氮菲溶解于有机酸。 感觉知识爆炸,该如何取舍和提升学习效率? 南方黑芝麻糊包装上标注黑芝麻含量≥25%是什么概念,是黑芝麻含量大的意思吗?