Spring Bean的生命周期

大佛拈花:
具体过程如下。
(1)当调用者通过 getBean(beanName)向容器请求某一个 Bean时,如果容器注册了
        org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor 接口,则在实例化 Bean之前,将调用接            口的 postProcessBeforeInstantiation()方法。
(2)根据配置情况调用Bean 构造函数或工厂方法实例化 Bean。
(3)如果容器注册了 InstantiationAwareBeanPostProcessor接口,那么在实例化 Bean之后,调用该接口的                                         postProcessAfterInstantiation(方法,可在这里对已经实例化的对象进行一些“梳妆打扮”。
(4)如果 Bean 配置了属性信息,那么容器在这一步着手将配置值设置到 Bean对应的属性中,不过在设置每个属性之前将先调          用 InstantiationAwareBeanPostProcessor接口的 postProcessPropertyValues鳥)方法。
(5)调用Bean的属性设置方法设置属性值。
(6)如果 Bean 实现了 orgspringframework.beans.factory.BeanNameAware接口,则将调用 setBeanName()接口方法,将配置           文件中该Bean对应的名称设置到Bean中。
(7)如果Bean 实现了 org.springframework.beans.factory.BeanFactoryAware接口,则将调用 setBeanFactory(接口方法,将               BeanFactory容器实例设置到Bean中。
(8)如果 BeanFactory 装配了 org.springframework.beans.factory.config.BeanPostProcessor后处理器,则将调用             BeanPostProcessor的 Object postProcessBeforeInitialization(Objectbean,String beanName)接口方法对Bean进行加工操作。其中,入参 bean是当前正在处理的Bean,而 beanName是当前 Bean的配置名,返回的对象为加工处理后的Bean。用户可以使用该方法对某些Bean进行特殊的处理,甚至改变Bean的行为。BeanPostProcessor在 Spring 框架中占有重要的地位,为容器提供对Bean进行后续加工处理的切入点,Spring 容器所提供的各种“神奇功能”(如AOP、动态代理等)都通过BeanPostProcessor
实施。
(9)如果Bean 实现了InitializingBean接口,则将调用接口的afterPropertiesSet(方法。
(10)如果在<bean>中通过init-method属性定义了初始化方法,则将执行这个方法。
(11)BeanPostProcessor 后处理器定义了两个方法:其一是 postProcessBefore
Initialization(),在第(8)步调用;其二是 Object postProcessAfterInitialization(Object bean,
String beanName),这个方法在此时调用,容器再次获得对Bean进行加工处理的机会。
(12)如果在<bean>中指定Bean的作用范围为scope=”prototype",则将Bean 返回
给调用者,调用者负责Bean后续生命的管理,Spring不再管理这个Bean的生命周期。
如果将作用范围设置为scope="singleton",则将Bean放入SpringIoC容器的缓存池中,
并将 Bean 引用返回给调用者,Spring 继续对这些Bean进行后续的生命管理.
(13)对于scope="singleton"的Bean(默认情况),当容器关闭时,将触发Spring对
Bean 后续生命周期的管理工作。如果 Bean 实现了 DisposableBean 接口,则将调用接口
的destory()方法,可以在此编写释放资源、记录日志等操作。
(14)对于scope="singleton"的Bean,如果通过<bean>的destroy-method属性指定了
Bean 的销毁方法,那么Spring 将执行Bean 的这个方法,完成Bean资源的释放等操作。
    

    Bean 的完整生命周期从 Spring 容器着手实例化 Bean 开始,直到最终销毁 Bean.
其中经过了许多关键点,每个关键点都涉及特定的方法调用,可以将这些方法大致划分
为4类。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值