Spring框架中bean的生命周期(理解)

2023-11-15

1.解释Spring框架中bean的生命周期

在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动进行垃圾回收。

        相比之下,Spring容器中的bean的生命周期就显得相对复杂多了。正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。下图展示了bean装载到Spring应用上下文中的一个典型的生命周期过程。

bean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制。
正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤。我们对上图进行详细描述:
Spring对bean进行实例化;

Spring将值和bean的引用注入到bean对应的属性中;
如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法;
如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;
如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法;
如果bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()方法。类似地,如果bean使用initmethod声明了初始化方法,该方法也会被调用;
如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()方法;
此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
现在你已经了解了如何创建和加载一个Spring容器。但是一个空的容器并没有太大的价值,在你把东西放进去之前,它里面什么都没有。为了从Spring的DI(依赖注入)中受益,我们必须将应用对象装配进Spring容器中。
 

2.哪些是重要的bean生命周期方法? 你能重载它们吗?

有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架中bean的生命周期(理解) 的相关文章

随机推荐

  • 蓝牙解析(part7):BLE的连接

    转自Wowo大神的http www wowotech net bluetooth ble connection html 1 前言 了解蓝牙的人都知道 在经典蓝牙中 保持连接 Connection 是一个相当消耗资源 power和带宽 的过
  • 动态BGP与静态BGP的区别

    动态BGP与静态BGP的区别 1 静态BGP功能简单 其带宽功能 可以实现多网接入 但路径上只有通向几大运营商的固定的几条路径 当某个运营商方向 的某个路由节点出现故障时 会导致某个运营商方向不能正常通信 造成单点故障 影响范围是 某个运营
  • 应急响应全流程

    一 根据情报先判断出需要出应急的是什么事件类型 常见事件类型 大规模沦陷 情况类型 情况内容 挖矿病毒 勒索病毒 无文件落地 不死 顽固 马 钓鱼 数据劫持 二 保持第一现场 第一现场包含 第一发现人 第一情报 失陷主体 群体 主体 群体行
  • drools 7.x 决策表使用

    1 何时使用决策表 何时使用决策表 如果规则能够被表达为模板 数据的格式 那你 应该考虑使用决策表 决策表中的每一行就是对应模板的一行数据 将产生一个规则 运行决策表 Drools 引擎所部署的系统中执行决策表 首先 决策表转换 成的Dro
  • Git — husky + eslint 实现代码提交检测

    一 配置ESlint 1 1 安装eslint npm install eslint D 1 2 初始化eslint 生成配置文件 npx eslint init 1 3 在编辑器安装ESlint插件 1 4 通过执行命令检测文件代码规范
  • 要隐藏高德地图的线外面的区域

    要隐藏高德地图的线外面的区域 可以通过设置地图的 mask 属性来实现 下面是具体的步骤 获取需要隐藏的区域的边界坐标点集合 这些坐标点必须按照顺时针或逆时针方向排序 这样才能正确地关闭区域 推荐使用高德官方提供的在线地图工具获取坐标点 创
  • 栈.栈STL

    栈 是后进先出的数据结构 它叫做栈 栈限定为只能在一端进行插入和删除操作 栈的实现只需要一个一维数组和一个指向栈顶的变量top就可以了 我们通过top来对栈进行插入和删除操作 栈的使用 1 判定回文串 利用栈实现判断字符串是不是回文串 栈用
  • 腾讯 T10级 Jetpack 学习思维导图意外流出,还不赶紧过来围观?

    引言 2018年 Google 官方推出一个全新的开发组件工具库 Jetpack 并将2017年所推出的一个架构组件库 Architecture Components 作为 Jetpack 的一部分纳入其中 当然 Jetpack 并没有就此
  • spark程序运行异常:java.lang.OutOfMemoryError: GC overhead limit exceeded

    此次异常是在集群上运行的spark程序日志中发现的 由于这个异常导致sparkcontext被终止 以致于任务失败 出现的一些原因 参考 GC overhead limit exceeded java lang OutOfMemoryErr
  • Edittext出现两个光标且位置不一致

    问题发生 近期的UI调整中发现在对Edittext设置居中过后 点击存在内容的ET会出现两个光标且不一致 解决方案 设置控件为单行
  • 什么是BI分析系统

    BI分析系统是一种用于帮助企业进行数据分析和决策的工具 它通过收集 整理 分析和可视化庞大的数据集 帮助企业了解自身的业务状况 并提供有关未来预测和战略决策的有价值信息 BI分析系统以其强大的功能和灵活性 在企业管理和决策中发挥着重要的作用
  • P5744 【深基7.习9】培训

    include
  • 详解目标检测Faster R-CNN

    目标检测的一般结构 背景 R CNN 是 Faster R CNN 的启发版本 R CNN 是采用 Selective Search算法来提取 propose 可能的 RoIs regions of interest 区域 然后对每个提取区
  • IC验证常见问题 地图

    SV SystemVerilog和Verilog中的表达式位宽 https blog csdn net m0 46345246 article details 121758747 dist 权重 https www cnblogs com
  • flutter -- 创建一个新的应用

    VS Code 启动 VS Code 调用 View gt Command Palette shift command P 输入 flutter 然后选择 Flutter New Module Project action 指定放置项目的位
  • PyCharm 装 cv2(openCV)

    首先在下面这个网址找对应的openCV版本 cp后就是python版本号 cp39是python3 9 Python Extension Packages for Windows Christoph Gohlke uci edu https
  • 如何成长为一名机器学习工程师

    如何成长为一名机器学习工程师 经常有人这么问 而这篇文章就尝试回答这个问题 其中会谈到关于机器学习的方方面面 从简单的线性回归到最新的神经网络 你不仅将学习如何使用这些技术 还将学习如何从头开始构建它们 这个指南主要面向计算机视觉 CV 这
  • 人工智能概论--第三次作业(三分类模型)

    1 建立数据集 三组数据 2 建立神经网络 3 训练网络 4 可视化训练过程 5 训练结果
  • 【漏洞复现】CVE-2022-46169 Cacti命令执行

    开启环境 查看端口号 登录ip 8080 发现网页报错如下 FATAL Connection to Cacti database failed Please ensure the PHP MySQL module is installed
  • Spring框架中bean的生命周期(理解)

    1 解释Spring框架中bean的生命周期 在传统的Java应用中 bean的生命周期很简单 使用Java关键字new进行bean实例化 然后该bean就可以使用了 一旦该bean不再被使用 则由Java自动进行垃圾回收 相比之下 Spr