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

Bean的生命周期

Spring中的一个Bean神明周期总体分为以下几个阶段:

在这里插入图片描述

细化Bean的生命周期:

在这里插入图片描述
从上面可以看出,可初步分为四个阶段:

  1. Bean的实例化阶段(通过反射创建对象)
  2. Bean的设置属性阶段(属性值非自动装配)
  3. Bean的初始化阶段(如数据源赋值、校验属性)
  4. Bean的销毁阶段(ioc容器销毁关闭,关闭数据源)
  • 在设置属性阶段后,postProcessBeforeInitialization方法执行前,会执行很多Aware类型的接口,这种类型接口作用是加载资源到Spring容器中,让bean获取Spring容器中的服务。

  • 在初始化阶段,有个特别重要的接口BeanPostProcessor(后置处理器),在初始化前、后调用:
    在这里插入图片描述

  • 初始化方式有三个,分别是:
    1.InitializingBean的afterPropertiesSet方法
    2.@PostConstruct注解标注的方法
    3.配置的init-method

  • 容器销毁的方式有三个,分别是:
    1.@PreDestroy注解标注的方法
    2.DisposableBean接口的destroy()方法
    3.配置的destroy-method

总结Bean生命周期:

  1. Bean容器找到Spring配置文件中Bean的定义
  2. Bean容器利用java 反射机制实例化Bean
  3. Bean容器为实例化的Bean 设置属性值
  4. 如果Bean实现了BeanNameAware接口,则执行setBeanName方法;
  5. 如果Bean实现了BeanClassLoaderAware接口,则执行setBeanClassLoader方法;
  6. 如果Bean实现了BeanFactoryAware接口,则执行setBeanFactory方法;
  7. 如果Bean实现了xxxAware接口…;
  8. 如果Bean实现了ApplicationContextAware接口,则执行setApplicationContext方法;
  9. 如果加载了BeanPostProcessor(后置处理器)相关实现类,则执行postProcessBeforeInitialization方法
  10. 如果Bean定义初始化方法(PostConstruct注解、配置init-method、实现了InitializingBean接口),则执行定义的初始化方法
  11. 如果加载了BeanPostProcessor(后置处理器)相关实现类,则执行postProcessAfterInitialization方法
  12. 当要销毁这个Bean时,如果自定义了销毁方法(PreDestroy注解、配置destroy-method、实现了DisposableBean接口),则执行定义的销毁方法

相关文章:

  • 哈希桶(详解创建)
  • 回归预测 | MATLAB实现SSA-BP多输入单输出回归预测
  • 【雅思备考】听说读写攻略 | 雅思核心词汇之科技类
  • Python-列表,从基础到进阶用法大总结,进来查漏补缺
  • JDBC模拟SQL注入和避免SQL注入
  • flink在企业IT架构中如何定位-在选型流批一体技术与大数据架构时的避坑指南
  • JUC并发编程之CompletableFuture基础用法
  • SpringBoot+Mybatis-Plus多数据源使用
  • Colab-免费GPU算力
  • 【CH559L单片机】串口下载程序说明
  • CMake中macro的使用
  • windows利用msys2安装minGW64
  • (42)STM32——LCD显示屏实验笔记
  • 全国青少年软件编程等级考试标准Python(1-6级)
  • Java语法基本概念
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Fundebug计费标准解释:事件数是如何定义的?
  • iOS 系统授权开发
  • Vue.js 移动端适配之 vw 解决方案
  • 分类模型——Logistics Regression
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于字符编码你应该知道的事情
  • 汉诺塔算法
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 写代码的正确姿势
  • 异常机制详解
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #pragma multi_compile #pragma shader_feature
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (安卓)跳转应用市场APP详情页的方式
  • (二)hibernate配置管理
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三) diretfbrc详解
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)为C# Windows服务添加安装程序
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • **python多态
  • .Net 6.0 处理跨域的方式
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .Net语言中的StringBuilder:入门到精通
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @JSONField或@JsonProperty注解使用
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [c#基础]DataTable的Select方法
  • [C++]18:set和map的使用
  • [C++]AVL树怎么转
  • [CLickhouse] 学习小计