Spring Bean的生存日记

此答案有毒,请谨慎服用。如果需要深入而且准确理解Spring的工作原理以及设计思想,请阅读以下官方文档。本稿仅供学习!

参考文档:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html#beans-introduction

(1)关于IoC以及依赖注入
在Spring框架当中,IoC是十分重要的概念。从前由硬编码植入的对象通过简单的配置,即可达到解耦合的目的,从而使开发变得更加灵活。

在这过程中,Spring提供了一套容器,当然这个容器可以是BeanFactory,也可以是ApplicationContext,ApplicationContext是BeanFactory的升级版,比BeanFactory有了更多的功能。这套容器的主要作用是实例化、管理、装载以及卸载掉对象的。

(2)关于生命周期
那么在Spring容器中,一个对象从生成到销毁就有了它的生命周期,而在这个过程中,为了更加方便开发者在对象生命周期中更加灵活地处理这些Bean,Spring开放了相关的容器扩展点给开发者。

举个简单的例子,比如程序在运行过程中,Bean因为遇到异常而被强制销毁了,这时候你就需要在Bean销毁的过程中输出异常信息。这时候如果将这个Bean继承了BeanPostProcessor,并且重写了里面的distroy()方法,此时你就能自如地做好销毁控制了。

知道了这点,我们则需要更好地理解Spring的生命周期。
一个Bean的生命周期是怎么样的呢?
1)初始化
通过配置文件或者注解Spring会根据相关信息实例化bean后放置在Spring的容器中。

2)初始化回调
当Bean继承了InitializingBean,重写afterProperiesSet()既可以执行初始化回调函数。

3)销毁
Bean进入销毁过程

4)销毁回调
当Bean继承了DisposableBean时,重写destroy方法,可在销毁后执行销毁回调方法。

一个Bean的生命周期也与它所承载的容器生命周期嘻嘻相关。
因此Spring管理对象还可以实现Lifecycle接口。Lifecycle接口提供了start()方法和stop()方法,实现他们即可在容器初始化和销毁时进入开发者自定义的操作中。

那么题主所说的BeanPostProcessor又是什么呢?
Spring为开发者提供了容器的扩展点,用户可以在这些容器的拓展点实现自己的逻辑以及操作。
BeanPostProcessor作用在一个bean的实例上。这意味着BeanPostProcessor是在实例Bean后进入插入的。
如果用户实现了BeanPostProcessor的postProcessBeforeInitialization(),那么在Bean的afterProperiesSet()调用前会优先调用。
如果用户实现了BeanPostProcessor的postProcessAfterInitialization(),那么在Bean的afterProperiesSet()调用后调用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值