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

spring 生命周期

你知道spring是管理的Bean 何时被创建,何时初始化完成,以及何时被销毁的吗?我们一起讨论讨论。

先来看看spring的作用域有哪些?

1、singleton 是默认的作用域,也就是说,当定义 Bean 时,如果没有指定作用域配置项,则 Bean 的作用域被默认为 singleton。

当将一个 bean 定义设置为 singleton 作用域的时候,Spring IoC 容器只会创建该 bean 定义的唯一实例。

Singleton 是单例类型,就是在创建起容器时就同时自动创建了一个 bean 的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton 作用域是 Spring 中的缺省作用域。

2、当一个 bean 的作用域为 Prototype,表示一个 bean 定义对应多个对象实例。Prototype 作用域的 bean 会导致在每次对该 bean 请求(将其注入到另一个 bean 中,或者以程序的方式调用容器的 getBean() 方法)时都会创建一个新的 bean 实例。Prototype 是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。

Bean 生命周期的整个执行过程描述如下:

1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。

2)利用依赖注入完成 Bean 中所有属性值的配置注入。

3)如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。

4)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。

5)如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。

6)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的预初始化方法 postProcessBeforeInitialzation() 对 Bean 进行加工操作,此处非常重要,Spring 的 AOP 就是利用它实现的。

7)如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。

8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。

9)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的初始化方法 postProcessAfterInitialization()。此时,Bean 已经可以被应用系统使用了。

10)如果在 <bean> 中指定了该 Bean 的作用范围为 scope="singleton",则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 <bean> 中指定了该 Bean 的作用范围为 scope="prototype",则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean。

11)如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。

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

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

相关文章:

spring 生命周期

你知道spring是管理的Bean 何时被创建&#xff0c;何时初始化完成&#xff0c;以及何时被销毁的吗&#xff1f;我们一起讨论讨论。先来看看spring的作用域有哪些&#xff1f;1、singleton 是默认的作用域&#xff0c;也就是说&#xff0c;当定义 Bean 时&#xff0c;如果没有指…...

JAVADay3

变量的使用场景&#xff1a;当某个数据经常发生改变时&#xff0c;我们也可以用变量存储。当数据变化时&#xff0c;只要修改变量里面记录的值即可。 变量的定义格式&#xff1a; 数据类型 变量名数据值; 数据类型&#xff1a;为空间中存储的数据&#xff0c;加入类型的限制…...

条款3:理解decltype

对于给定的名字或表达式&#xff0c;decltype能告诉你名字或表达式型别。一般来说&#xff0c;它告诉你的结果和你预测的是一样的。偶尔它也会给出某个结果&#xff0c;让你抓耳挠腮&#xff0c;不得不去参考手册或在线FAQ页面求得一些启发。 先从一般案例讲起——就是那些不会…...

设计模式 - 结构型模式_外观模式

文章目录结构型模式概述CaseBad ImplBetter Impl小结结构型模式 结构型模式主要是解决如何将对象和类组装成较大的结构&#xff0c; 并同时保持结构的灵活和⾼效。 结构型模式包括&#xff1a;适配器、桥接、组合、装饰器、外观、享元、代理&#xff0c;这7类 概述 设计模式…...

fs/fuse__fuse IO模式与文件元数据一致性问题

fs/fuse__fuse IO模式与文件元数据一致性问题 1.基本IO模式 1.1 direct IO 在该模式下&#xff0c;所有的读写请求都不会经过缓存&#xff0c;fuse dev会将请求直接发送到fuse daemon&#xff0c;这种模式不支持预读和mmap。可以通过在open_reply时配置&#xff0c;在libfuse…...

开拓大脑,思维upup(1)——赛马找最快

赛马找最快前言问题详解前言 本系列博客是我的一个尝试&#xff0c;开拓思维系列的内容是一些有趣的智力题&#xff0c;可以起到锻炼思维能力的作用&#xff0c;另外题目也是非常有趣&#xff0c;如果有感兴趣的小伙伴一定要关注博主的这一系列哦&#xff01; 问题 25匹马5条跑…...

@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)

EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案&#xff08;史上最全最详细&#xff09; 目录EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案&#xff08;史上最全最详细&#xff09;一、出问题的经过及其原因二、解决方案2.1 EnableW…...

Connext DDS开发指南(4)键Keys和实例Instances

到目前为止,我们已经讨论了样本Samples。例如,DataWriter发布特定主题的样本。 有时,我们希望使用一个主题发布几种不同对象的数据样本,例如航班或传感器信息等。Connext DDS使用“实例instance”来表示这些真实世界的对象。(请参见表4.1。)当需要在DDS主题中表示多个对象…...

从零开始的数模(十三)主成分分析

目录 一、概念 1.1线代知识补充 1.3主成分的命名与解释 1.4原理 1.5应用 ​编辑 二、基于python的主成分分析 2.1主要步骤 2.2.部分说明 2.3代码 完整代码 完整代码2 三、基于MATLAB的主成分分析 3.1算法步骤 ​编辑 3.2代码 完整代码 一、概念 1.1线代知识补充 …...

41 计算机网络原理26h-北大严伟黄群老师

P11.1.1网络定义08:11P21.1.2计算机网络分类概述03:31P31.1.3按网络覆盖规模分类05:57P41.1.4按传输技术分类10:17P51.1.5网络一般形式06:28P61.2.1电话网路与电路交换08:31P71.2.2计算机网路与包交换11:01P81.2.3电路交换与包交换07:06P91.2.4评价网络性能的指标08:53P101.3.1…...

「SQL面试题库」 No_17 游戏玩法分析 II

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…...

递归和递推

递推 递推算法的特点一个问题的求解需要大量重复计算&#xff0c;在已知的条件和所求问题之间总存在着某种相互联系的关系&#xff0c;在计算时&#xff0c;我们需要找到这种关系&#xff0c;进行计算&#xff08;递推关系式&#xff09;。即递推法的关键&#xff0c;就是找到…...

教程 | 如何用 Homer 处理 fNIRS 数据?

一、Homer2软件介绍 Homer2的下载&#xff1a;https://www.nitrc.org/frs/?group_id619&release_id3661 Homer2官网&#xff1a;https://homer-fnirs.org/ Homer2安装&#xff1a;使用matlab的set path即可安装&#xff1b;有可能每次打开matlab都要重新安装一下。 Ho…...

深入浅出 SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)

互联网是虚拟的&#xff0c;通过互联网我们无法正确获取对方真实身份。数字证书是网络世界中的身份证&#xff0c;数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息&#xff0c;通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可…...

山东首版次申报的材料

首版次软件基本知识: 1、 首版次高端软件的定义: 首版次高端软件是指省内企事业单位通过自主开发或者合作开发其功能或性能有重大突破 在该领域具有技术领先优势或者打破市场垄断拥有自主知识产权 尚未取得重大市场业绩的 同产品名称、同一版本号的软件产品。 2、主管部门:山…...

jvm03垃圾回收篇

p134 垃圾回收相关章节的说明 p135 什么是GC 为什么需要GC P136 了解早起垃圾回收行为 p137 java自动内存管理介绍 p138垃圾回收相关算法概述 p139引用计数算法的原理及优缺点 p140 python引用计数实施方案 p141 可达性分析算法与GC ROOTS p142 对象的finalization机制 p143 代…...

osx 如何用 podman 和 Kubernetes

在 MacOS 上使用 Podman 和 Kubernetes&#xff0c;您需要执行以下步骤&#xff1a; 首先&#xff0c;您需要在您的 MacOS 上安装 Podman。要安装 Podman&#xff0c;请使用 Homebrew 运行以下命令&#xff1a; brew install podman 安装 Kubernetes 命令行工具 kubectl。您可…...

n个字符串排序(指针数组实现)

输入n和n个字符串(每个字符串不超过80个字符)请排序后输出&#xff0c;要求使用指针数组(而不是二维字符数组)处理 可以使用指针数组和动态内存分配来实现&#xff0c;具体思路如下&#xff1a; 首先读入字符串的个数 n&#xff1b;使用 malloc 函数动态分配一个指针数组 strA…...

vcs makefile脚本学习

文章目录前言1、各种波形文件2、makefile赋值3、vcsdve&#xff1a;最简单查看波形4、vcsverdi&#xff1a;把编译选项设置为变量前言 2023.3.16 &#x1f338;都开了 2023.3.29 月末 1、各种波形文件 vpd&#xff1a;Value Plus Dump&#xff0c;vcs自带的DVE的波形 fsdb&am…...

如何利用VS Code高效地写Markdown文档

1. 安装VS Code https://code.visualstudio.com/ 2. 安装以下插件 插件&#xff1a;Markdown All in One 用途&#xff1a;可以为Markdown文件做格式整理。 详细介绍&#xff1a;https://marketplace.visualstudio.com/items?itemNameyzhang.markdown-all-in-one 使用方…...