美文网首页
Spring的Bean的生命周期

Spring的Bean的生命周期

作者: 星空怎样 | 来源:发表于2020-05-29 10:28 被阅读0次

    [toc]

    前言

    Spring可以管理singleton(单例)作用域的Bean的生命周期,prototype作用域的Bean,Spring只负责创建,当容器创建交给客户端代码管理,容器不在跟踪其生命周期,每次客户端请求prototype作用域的Bean,Spring都会产生一个新的实例。

    对于Singleton作用域的Bean,每次请求都会返回同一个共享实例,客户端代码不能控制Bean的销毁,Spring容器负责跟踪Bean的产生、销毁,Spring容器可以创建Bean之后进行某些资源申请,还可以在销毁Bean实例之前,先回收某些资源。

    生命周期

    Spring的Bean的生命周期:

    • 第一步:创建实例
    • 第二步:出入属性
    • 第三步:如果实现了BeanNameAware接口,就调用setBeanName方法
    • 第四步:如果实现了ApplicationContextAware方法,则调用setApplicationContext方法
    • 实现了各种****Aware接口,调用对应方法
    • 第五步:调用BeanPostProcessor中的postProcessBeforeInitialization方法
    • 第六步:调用使用@PostConstruct
    • 第七步:如果实现了InitializingBean接口则调用afterPropertiesSet方法进行Bean的初始化
    • 第八步:调用Bean设置init方法,init-method
    • 第九步:调用BeanPostProcessor的postProcessAfterinitialization方法
    • 第十步:调用@PreDestroy注解方法调用
    • 第十一步:如果实现了DisposableBean接口,调用destroy方法
    • 第十二步:调用Bean设置的destroy方法destroy-method

    注:

    • BeanPostProcessor是Spring Bean的后处理器,是一种特殊的Bean,这种特殊的Bean不对外提供服务,甚至不需要id属性,他主要负责对容器其他Bean执行后处理,例如容器中目标Bean生成代理等,这种Bean被称为Bean的后处理。
    • 初始化:InitalizingBean提供的afterPropertiesSet与init-method功能一样,对于实现了InitializingBean接口的Bean无需使用init-method属性来指定初始化方法,如果既采用了init-method属性指定初始化方法,又实现了InitializingBean接口来指定初始化方法,Spring容器会执行两个初始化方法,先执行initializingBean接口中定义的方法,然后执行init-method属性指定的方法(推荐使用init-method,因为无需代码入侵)
    • 销毁:DisposableBean提供了destroy方法与destroy-method功能一样,对于实现了DisposableBean接口的Bean无需使用destroy-method属性来指定初始化方法,如果两者同时采用,Spring容器会执行两个方法,先执行DisposableBean接口中定义的方法,然后执行destroy-method属性指定的方法(推荐使用destroy-method,因为无需代码入侵)

    相关文章

      网友评论

          本文标题:Spring的Bean的生命周期

          本文链接:https://www.haomeiwen.com/subject/ihcxzhtx.html