【spring】一文带你弄懂Spring Bean的生命周期(超详细,超级通俗易懂!!)

news2024/12/24 9:27:23

目录

首先让我们来回顾一下Spring中的Bean是什么

Bean的生命周期

然后让我们由浅及深的对Bean的创建过程进行了解

首先来看最核心的五步骤

然后让我们逐层递进,学习一下七步骤版本吧

现在我们就可以进一步了解十步骤的版本(完整的生命周期)


首先让我们来回顾一下Spring中的Bean是什么

        在Spring框架中,Bean是一个被Spring容器所管理的对象。Spring中的对象的创建、组装和管理是通过IOC思想和DI机制来完成的,而这些对象就被称为Bean。

        简单来说,Bean就是一个由Spring容器初始化、管理和维护的普通的Java对象。通过Spring容器,我们可以方便的创建和获取这些对象,并且可以配置它们的行为与属性。

在 Spring 中,我们可以配置 Bean 的定义和属性,以及它们之间的依赖关系。常见的配置方式包括 XML 配置文件、注解和 Java 配置类。

下面是一个使用 XML 配置 Bean 的示例:

<!-- Bean 的定义 -->
<bean id="userService" class="com.example.UserService">
    <!-- 设置属性 -->
    <property name="userDao" ref="userDao"/>
    <!-- 其他配置 -->
</bean>

<bean id="userDao" class="com.example.UserDao">
    <!-- 设置属性 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 其他配置 -->
</bean>

        在上述示例中,UserServiceUserDao 都被定义为 Bean。userService 使用了 userDao 作为依赖,因此需要在配置中设置这个依赖关系。

        通过 Spring 容器的配置,Spring 会根据配置信息创建相应的 Bean,并将它们组装好。通过容器,我们可以获取到这些 Bean,并使用它们进行业务处理。

        除了 XML 配置外,Spring 还提供了注解和基于 Java 类的配置方式来定义 Bean。例如,使用注解时可以通过 @Component@Service@Repository 等注解将类声明为 Bean,而使用 Java 配置类时可以使用 @Bean 注解进行 Bean 的定义。

复习完Bean之后,就可以进一步探讨Bean是如何创建的,它的流程是怎样的。

Bean的生命周期

        首先可以来看一下整个Spring Bean完整的生命周期流程图,展示了从Spring 容器一开始的初始化Bean最终到销毁掉Bean的流程(大家可以简单看过一遍再详细看下面的讲解,在脑海里大概有一个概念,能够方便理解下面的讲述内容)

然后让我们由浅及深的对Bean的创建过程进行了解

首先来看最核心的五步骤

  1. 实例化——依赖注入之前已经创建的java对象,但是Spring Bean对外不可用(相当于一个空壳  )
  2. 依赖注入
  3. 初始化
  4. 使用Bean
  5. 销毁Bean

根据具体的代码例子,就能看出哪部分负责的什么规则了(非常容易理解)

 测试类

xml文件(配置了初始化方法——初始化步骤就自动调用执行了,销毁方法——销毁的时候就自动调用了)

 结果

然后让我们逐层递进,学习一下七步骤版本吧

多的两个步骤多在哪里?

  1. 初始化之前(BeanPostProcessor 的before方法)
  2. 初始化之后(BeanPostProcessor 的after方法——诸如AOP就是在这里面做的)

然后加入到五步骤版本的相应位置

1、实例化——依赖注入之前已经创建的java对象,但是Spring Bean对外不可用(相当于一个空壳  )

2、依赖注入

        3、初始化前——BeanPostProcessor before方法

4、初始化

         5、初始化前——BeanPostProcessor after方法

6、使用Bean

7、销毁Bean

然后这里自定义了一个MyProcessor,实现了BeanPostProcessor,来展示在声明周期中的作用

然后再在配置文件中进行配置,就可以启用啦

 结果展示

现在我们就可以进一步了解十步骤的版本(完整的生命周期)

绿色的为新增的具体步骤哦!

1、实例化——依赖注入之前已经创建的java对象,但是Spring Bean对外不可用(相当于一个空壳  )

2、依赖注入

                3、BeanNameAware BeanFactoryAware(类似的xxxaware方法)方法执行啦!(xxxAware可以让bean获取spring容器中的服务)

        4、初始化前——BeanPostProcessor before方法

                5、InitialingBean 接口的方法执行啦!

6、初始化

         7、初始化前——BeanPostProcessor after方法

8、使用Bean

        9、DisposableBean接口的方法执行啦!

10、销毁Bean

新实现了这三个接口

然后将三个接口的方法重写,就能在Bean生命流程中自动调用了 

 结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java“牵手”1688商品列表数据,关键词搜索1688商品数据接口,1688API申请指南

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

【Axure高保真原型】多图表动态切换

今天和大家分享多图表动态切换的原型模板&#xff0c;点击不同的图标可以动态切换对应的表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改和删除&#xff0…

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看?(二)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

信息化发展10

消费互联网基本属性 消费互联网具有的属性包括&#xff1a; 1 &#xff09; 媒体属性&#xff1a; 由自媒体、社会媒体以及资讯为主的门户网站。 2&#xff09; 产业属性&#xff1a; 由在线旅行和为消费者提供生活服务的电子商务等其他组成。 数字中国概览示意图 在党的十九…

设计模式行为模式-访问者模式

文章目录 介绍基本原理1. 定义访问者模式2. 角色及其职责2.1 元素&#xff08;Element&#xff09;2.2 具体元素&#xff08;ConcreteElement&#xff09;2.3 访问者&#xff08;Visitor&#xff09;2.4 具体访问者&#xff08;ConcreteVisitor&#xff09;2.5 对象结构&#x…

D-Link DCS 密码泄露漏洞

0x01 前言 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与本文作者无关&#xff0c;需自行负责&#xff01;&#xff01;&#xff01; 0x02 漏洞描述 D-link DCS是一款成像色彩为彩色 是一款网络摄像机。D-link DCS系统存在密码泄露漏洞&#xff0c;攻击者通过…

什么牌子的电容笔比较好?适合学生党的电容笔推荐

如今&#xff0c;几乎人手一部iPad平板&#xff0c;它能帮大家解决许多工作、学习方面的问题&#xff0c;例如在工作中整理文件&#xff0c;制作一些简单的PPT。因此&#xff0c;给iPad平板配上一个好的电容笔就显得尤为重要了。在此&#xff0c;我向各位安利一些又好用又便宜的…

【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting

文章目录 写这个题目的原因寻找提交网址题目解决思路AC代码成功AC 写这个题目的原因 1、今天在看王道考研数据结构的课&#xff08;虽然我要保研&#xff0c;但是因为这些看保研面试的时候会问&#xff0c;所以看一下嘞orz&#xff09;&#xff0c;看到了这个多叉树转换为二叉…

微信黑名单怎么恢复好友?1分钟教你找回消失的“他”

微信的【黑名单】功能可以屏蔽掉一些令大家分心或者浪费时间的人。这个功能有利于减少干扰、保护隐私&#xff0c;并且还能大大提高用户的社交体验。 但是&#xff0c;有时候大家可能会因为发生冲突而将对方暂时拉入黑名单。在问题得到解决后却又希望恢复与他的联系。那么&…

Seata整合nacos,Postgresql 为DB存储

Seata整合nacos,Postgresql 为DB存储 环境 详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 <spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>所有选择seata版本为 1…

模拟实现应用层协议

模拟实现应用层协议 文章目录 模拟实现应用层协议应用层再谈协议 序列化和反序列化 网络版计算器自定义协议利用Json进行序列化和反序列化json库的安装条件编译 应用层 应用层&#xff08;Application layer&#xff09;是OSI模型的第七层。应用层直接和应用程序接口并提供常见…

CountDownLatch详解——深入探究CountDownLatch源码

这篇文章将会详细介绍CountDownLatch这个并发类&#xff0c;通过深入底层源代码讲解其具体实现。 /*** A synchronization aid that allows one or more threads to wait until* a set of operations being performed in other threads completes.*/ 上面是CountDownLatch这个…

对SAE的测评报告

对SAE的测评报告&#xff1a; 很高兴在这里跟大家分享我对SAE产品的测评体验&#xff0c;以下我将通过实验以及本期话题的问题这两个方面带领大家走进SAE&#xff1a; 产品介绍&#xff1a; Serverless应用引擎SAE是一款极简易用、自适应弹性的容器化应用平台。它提供全托管…

C++ 动态多态(虚函数)

所谓动态多态即&#xff0c;在运行过程中&#xff0c;会随参数的变化而展现不同的功能&#xff0c;其关键原理便是虚函数&#xff0c;与之对应的静态多态便是函数重载。 虚函数&#xff0c;即当存在与虚函数一样的函数&#xff0c;即返回值&#xff0c;函数名&#xff0c;参数等…

【毕业设计】基于SSM的电子图书分享系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;本系统结构简单&#xff0c;容易理解&#xff01;本系统功能结构完整&#xff0c;非常高适…

回归预测 | MATLAB实现IBES-ELM改进的秃鹰搜索优化算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现IBES-ELM改进的秃鹰搜索优化算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现IBES-ELM改进的秃鹰搜索优化算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图…

基于STM32的甲醛浓度检测报警仿真设计(仿真+程序+讲解)

仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;C0083 甲醛浓度检测报警仿真 1.主要功能2.仿真3. 程序4. 资料清单&下载链接 1.主要功能 功能说明&#xff1a; 1、以STM32单片机和控制核心设计甲醛浓度检测报警设计&…

Kubernetes技术--使用kubeadm快速部署一个K8s集群

这里我们配置一个单master集群。(一个Master节点,多个Node节点) 1.硬件环境准备 一台或多台机器,操作系统 CentOS7.x-86_x64。这里我们使用安装了CentOS7的三台虚拟机 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 2.主机名称和IP地址规划 3. 初始化准备工作…

15.MyCat数据库分片

MyCat 是一个开源的数据库中间件&#xff0c;主要用于将数据库操作请求路由和分发到后端的多个数据库节点。 1.Mycat环境搭建 在两个不同数据库中创建相同表 下载mycat https://github.com/MyCATApache/Mycat-Serverhttps://github.com/MyCATApache/Mycat-Server 将下…

【线程同步】AQS抽象排队同步器(AbstractQueuedSynchronizer)

AQS(AbstractQueuedSynchronizer)抽象排队同步器 AbstractQueuedSynchronizer AQS就是AbstractQueuedSynchronizer类 AQS其实就是JUC包下的一个基类&#xff0c;JUC下的很多内容都是基于AQS实现了部分功能&#xff0c;比如ReentrantLock&#xff0c;ThreadPoolExecutor&#…