当前位置: 首页 > news >正文

Spring中Bean的“一生”(生命周期)

文章目录

  • 一、图解
  • 二、文字解析
  • 总结


一、图解

在这里插入图片描述>注:处于同一行的执行顺序是从左往右

二、文字解析

SpringBean的生命周期总体分为四个阶段:实例化=>属性注入=>初始化=>销毁

  • Step1 ==实例化Bean:==根据配置文件中Bean的定义,利用JavaReflection反射技术创建Bean的实例(还是一个半成品
  • Step2 注入对象依赖的属性值(对象)
  • Step3 处理各种Aware接口: Spring会检测该Bean是否实现了xxxAware接口,通过此类型的接口,可以让Spring框架为当前Bean注入相应的内容。
    • 如果实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
    • 如果实现BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,注入的是Spring工厂
    • 如果实现的是ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文
  • Step4 执行BeanPostProcessor前置处理: 如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现BeanPostProcessor接口,将会在该阶段调用postProcessBeforeInitialization(Object obj,String s)方法
  • Step5 执行InitializingBean初始化方法: 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法
  • Step6 执行init-method自定义初始化方法: 如果BeanSpring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法
  • Step7 执行BeanPostProcessor后置处理: 如果这个Bean实现BeanPostProcessor接口,将会在该阶段调用**postProcessAfterInitialization(Object obj,String s)**方法
  • 以上步骤完成之后,Bean已经被真正创建,可以正常使用了
  • Step8 执行DisposableBean销毁Bean:Bean不再需要时,会经过清理阶段,如果实现了DisposableBean接口,则会调用destroy()方法执行销毁
  • Step9 执行destroy-method自定义销毁方法: 如果BeanSpring配置文件中配置了destroy-method属性,则会自动调用其配置的销毁方法

总结

  • 首先是实例化属性赋值初始化销毁这 4 个大阶段;
  • 再是初始化的具体操作,有 Aware 接口的依赖注入BeanPostProcessor 在初始化前后的前后置处理以及 InitializingBean 和 配置类加载的init-method 的初始化操作;
  • 实现 DisposableBean 接口调用destory()方法销毁以及配置类加载的destory-method销毁方法
http://www.lryc.cn/news/116729.html

相关文章:

  • 安卓:LitePal操作数据库
  • 【JavaEE初阶】了解JVM
  • 基于vue2.0和elementUi的vue农历日期组件vue-jlunar-datepicker(插件)
  • Python爬虫——selenium_元素定位
  • 短视频内容平台(如TikTok、Instagram Reel、YouTube Shorts)的系统设计
  • 【git】Git 回退到指定版本:
  • kibana+nginx配置密码 ubuntu
  • Git仓关联多个远程仓路径
  • 使用ffmpeg将m4a及wav等文件转换为MP3格式
  • 【CI/CD】Git Flow 分支模型
  • SpringBoot Thymeleaf模板引擎
  • prometheus部署
  • Flink-Window详细讲解-countWindow
  • React 18 state 如同一张快照
  • EasyPoi导出 导入(带校验)简单示例 EasyExcel
  • 八大排序
  • 网络安全【黑客技术】自学
  • 【网络通信】socket编程——TCP套接字
  • ROS2系统学习番外篇2---用VSCode开发ROS2程序
  • 06 - Stream如何提高遍历集合效率?
  • 【Spring】使用注解的方式获取Bean对象(对象装配)
  • [webpack] 基本配置 (一)
  • 模板学堂|SQL数据集动态参数使用场景及功能详解
  • Wlan——射频和天线基础知识
  • 前端实习周记第三周周记
  • Android 13 Launcher界面——移除Launcher的删除和卸载功能
  • 深度学习:使用卷积神经网络CNN实现MNIST手写数字识别
  • docker search 镜像报错: connect: no route to host (桥接模式配置静态IP)
  • 【VUE】[Violation] Added non-passive event listener to a scroll-blocking...
  • runit-docker中管理多个服务