Spring--10--Spring Bean的生命周期

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1.Spring Bean
    • 1.1 什么是 Bean
        • 简而言之,==bean 是由 Spring IoC 容器实例化、组装和管理的对象==。
    • 1.2 Spring框架管理Bean对象的优势
  • 2.Bean的生命周期
        • ==实例化 -> 属性赋值 -> 初始化 -> 销毁==
    • 1.实例化Bean
    • 2. Bean属性填充
    • 3.初始化Bean操作
        • 初始化阶段又可以分为几个步骤:
    • 4.销毁Bean


1.Spring Bean

1.1 什么是 Bean

我们来看下 Spring Framework 的官方文档:

In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application. Beans, and the dependencies among them, are reflected in the configuration metadata used by a container.
在这里插入图片描述

简而言之,bean 是由 Spring IoC 容器实例化、组装和管理的对象

1.2 Spring框架管理Bean对象的优势

在这里插入图片描述
在这里插入图片描述

2.Bean的生命周期

Spring Bean 的生命周期来说:

  • 实例化 Instantiation
  • 属性赋值 Populate
  • 初始化 Initialization
  • 销毁 Destruction
实例化 -> 属性赋值 -> 初始化 -> 销毁

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Spring中的bean的生命周期主要包含四个阶段:实例化Bean --> Bean属性填充 --> 初始化Bean -->销毁Bean

1.实例化Bean

  • 首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚末初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出一个bean对象

2. Bean属性填充

  • Bean实例创建出来后,接着调用populateBean()DI注入 设置对象属性值,也就是注入这个Bean依赖的其它bean对象(循环依赖 三级缓存)

3.初始化Bean操作

在这里插入图片描述

初始化阶段又可以分为几个步骤:
  1. 执行Aware接口的方法
  2. BeanPostProcessor的前置处理方法postProcessBeforelnitialization()
  3. 户自定义的初始化方法,如init-method
  4. BeanPostProcessor的后置处理方法postProcessAfterinitialization()

1.执行Aware接口的方法,Spring会检测该对象是否实现了xxxAware接口,通过Aware类型的接口,可以让我们拿到Spring容器的些资源。

  • 如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
  • 如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
  • 如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。

2.执行BeanPostProcessor的前置处理方法postProcessBeforelnitialization(),对Bean进行一些自定义的前置处理

  • 判断Bean是否实现了InitializingBean接口,如果实现了,将会执行lnitializingBean的afeterPropertiesSet()初始化方法;

3.执行用户自定义的初始化方法,如init-method等;

4.执行BeanPostProcessor的后置处理方法postProcessAfterinitialization()

  • AOP的实现代理对象

4.销毁Bean

初始化完成后,Bean就成功创建了,之后就可以使用这个Bean, 当Bean不再需要时,会进行销毁操作
在这里插入图片描述

  • 首先判断Bean是否实现了DestructionAwareBeanPostProcessor接口,如果实现了,则会执行DestructionAwareBeanPostProcessor后置处理器的销毁回调方法
  • 其次会判断Bean是否实现了DisposableBean接口,如果实现了将会调用其实现的destroy()方法
  • 最后判断这个Bean是否配置了dlestroy-method等自定义的销毁方法,如果有的话,则会自动调用其配置的销毁方法
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/229005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【分享】我想上手机器学习

目录 前言 一、理解机器学习 1.1 机器学习的目的 1.2 机器学习的模型 1.3 机器学习的数据 二、学习机器学习要学什么 2.1 学习机器学习的核心内容 2.2 怎么选择模型 2.3 怎么获取训练数据 2.4 怎么训练模型 三、机器学习的门槛 3.1 机器学习的第一道门槛 3.2 机器…

文件上传和下载

文件上传 1.文件上传的原理: 要实现Web开发中的文件上传功能,通常需完成两步操作:一是在Web项目的页面中添加上传输入项,二是在Servlet中读取上传文件的数据,并保存到目标路径中。 由于大多数文件的上传都是通过表单的形式提交…

北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯(bug已解决 更新至3.0)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1一些更新和讲解 1.2改正后的…

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号!用来区分不同的软件进程 被规定总共0~65535 TCP,UDP:65535 * 2 在同一协议下,端口号不可以冲突占用 端口分类: 公有端口:0~1023 HT…

Linux环境下用yum安装postgres15

1. 下载PostgreSQL 15 安装包 在官网选择对应版本的安装包 https://www.postgresql.org/download/ Linux | CentOS 7 | PostgreSQL 15 2. 安装PostgreSQL 15 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…

chrome安装jsonview

写在前面 通过jsonview可以实现,当http响应时application/json时直接在浏览器格式化显示,增加可读性。本文看下如何安装该插件到chrome中。 1:安装 首先在这里 下载插件包,然后解压备用。接着在chrome按照如下步骤操作&#xf…

小程序一键生成工具哪个好?

在这个数字化时代,小程序已经成为商家吸引客户、提升业务的重要工具。但是,传统的小程序开发方式既费时又费力,让许多商家望而却步。 现在,有了乔拓云小程序模板开发平台,一切都变了。 乔拓云提供了大量精心设计的模板…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展,手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员,了解手机销售技巧是必不可少的。本文将通过案例分析与实践,为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…

自动化运维工具-ansible部署

首先我们来谈一下,为什么要引入自动化运维呢? 引入自动化运维的目的是为了提高运维效率、降低人工操作的错误率、减少重复性的工作、提高系统的可靠性和稳定性。传统的手动运维方式存在以下问题: 出现了大量的人工干预,运维人员需…

Web端在线云剪辑方案

视频内容已经成为企业传播信息、展示品牌形象的重要手段。然而,视频制作并非易事,需要专业的技术和设备支持。为了帮助企业解决这个问题,美摄科技推出了Web端在线云剪辑方案,提供广播级专业技术赋能,帮助企业快速搭建视…

最新V2board面板支付设置(四)

顺哥博客 支付方式一(推荐): USDT收款: 特点:自己的USDT钱包收款,没有中间商,无手续费,实时到账项目开源地址:【点击进入】把文件usdtwebhook.php放到网站此目录下&…

使用命令行移除VSAN中故障磁盘

原创作者:运维工程师 谢晋 使用命令行移除VSAN中故障磁盘 前提故障盘移除 前提 客户有套VSAN环境内有一台服务器的磁盘组出现了一块故障的数据盘,但该盘已经处于完全掉线状态,无法进行正常移除。如下图: 如果遇到这种情况&am…

QT作业2

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘

为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘 个人简介前言多线程对于Java的意义📌1.提高程序性能:📌2 提高用户体验:📌3支持并发处理:📌4 资源共享和同步:&#…

el-tree数据量过大,造成浏览器卡死、崩溃

el-tree数据量过大,造成浏览器卡死、崩溃 场景:树形结构展示,数据超级多,超过万条,每次打开都会崩溃 我这里采用的是引入新的插件虚拟树,它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据迁移工具

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

选自《洛谷深入浅出进阶篇》——欧拉函数+欧拉定理+扩展欧拉定理

欧拉函数: 欧拉函数定义: 1~n中与n互质的数的个数。 比如 欧拉函数是积性函数:(也就是)当 n与m互质的时候: 由算术基本定理,我们可以设n,那么我们只要计算出的取值就能求出的取…

snakeyaml编辑yaml文件并覆盖注释

文章目录 前言技术积累实战演示1、引入maven依赖2、覆盖注释工具类3、snakeyaml工具类4、测试用例5、测试效果展示 写在最后 前言 最近在做一个动态整合框架的项目,需要根据需求动态组装各个功能模块。其中就涉及到了在application.yaml中加入其他模块的配置&#…

Windows版Minio使用教程(启动,登录,修改密码)

1 、下载安装包 进入官网下载安装包: MinIO | 高性能、支持原生 Kubernetes的对象存储 信任程序安装,就可以啦 2、启动MinIO 第一步,找到minio.exe所在的目录,在地址栏输入cmd进入cmd窗口。 第二步,输入.\minio.exe…

项目状态报告

《项目状态报告》 第1章 当前阶段的工作完成情况 1.1 概述 1.2 各子系统详细进度 第2章 偏差及偏差原因 第3章 偏差纠正措施 第4章 拟进行的变更 第5章 存在的风险及应对计划 第6章 下一阶段主要工作