• 一文拿捏 Spring Bean的生命周期


    Spring Bean的生命周期

     1.核心元素

    • BeanDefinition对象(Bean的类名、作用域、依赖关系等信息
    • Aware系列接口

      • BeanNameAware 

        • setBeanName()方法--->用于在Bean实例化后,将Bean的名称传递给Bean实例

      • BeanFactoryAware

        • setBeanFactory()方法--->用于在Bean实例化后,将BeanFactory(即Spring容器)传递给Bean实例

      • ApplicationContextAware

        • setApplicationContext()方法--->用于在Bean实例化后,将ApplicationContext(即Spring应用上下文)传递给Bean实例

    • BeanPostProcessor对象 --(初始化执行的方法-类比aop)

      • postProcessBeforeInitialization()方法

      • postProcessAfterInitialization()方法

    • InitializingBean接口

      • afterPropertiesSet()方法 -- (初始化方法)

    • init-method -- (自定义初始化方法)

    • DisposableBean接口 

      • destroy()方法 -- (销毁方法)

    • destory-method -- (自定义销毁方法)

    详细总图

    2.调用流程

    1. Spring框架会自动读取配置文件中所定义的类的相关信息,然后将其封装到BeanDefinition对象中(Bean的类名、作用域、依赖关系等信息)
    2. 通过反射借助于无参构造方法创建对象
    3. 调用set方法进行依赖注入
    4. 如果bean实现了BeanNameAware接口,那么此时就会执行该接口中的setBeanName方法
    5. 如果bean实现了BeanFactoryAware接口,那么此时就会执行该接口中的setBeanFactory.方法
    6. 如果bean实现了ApplicationContextAware接口,那么此时就会执行该接口中的setApplicationContext方法
    7. 如果在spring容器中存在BeanPostProcessor对象,那么此时就会执行该对象的postProcessBeforeInitialization,方法
    8. 如果bean实现了InitializingBean接口,那么此时就会执行afterPropertiesSet方法
    9. 如果存在自定义初始化方法,那么此时就会执行该方法
    10. 如果在spring容器中存在BeanPostProcessor对象,那么此时就会执行该对象的postProcessAfterInitialization方法
    11. 如果bean实现了DisposableBean接口,那么此时就会执行该接口中的destroy方法
    12. 如果存在自定义销毁方法,那么此时就会执行自定义销毁方法
  • 相关阅读:
    sqlilabs第一关
    Abaqus周期性边界条件
    Failed to start mysql.service Unit mysql.service not found
    Matlab:数据分析与多项式计算
    爬虫 — Js 逆向案例一英汉互译
    nuxt2框架知识总结
    使用 HTML CSS 和 JavaScript 创建星级评分系统
    Windows内核--CreateProcess到内核NtCreateProcess(2.3)
    MongoDB第一话 -- Docker安装MongoDB以及Springboot集成MongoDB
    前端开发,自定义本地域名解析,更改host,模拟线上环境
  • 原文地址:https://blog.csdn.net/qq_45643467/article/details/133491295