Spring Bean的生命周期

1、对象实例化

2、属性设置

3、初始化

4、使用

5、销毁

示例代码如下:

import org.springframework.stereotype.Component;@Component
public class SpringBeanA {public SpringBeanA() {System.out.println("第一步:实例化(spring对象:SpringBeanA)");}
}
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class SpringBeanLifeCycle implements InitializingBean, BeanNameAware, BeanFactoryAware, DisposableBean {private SpringBeanA springBeanA;@Autowiredpublic void setControllerTest(SpringBeanA springBeanA) {System.out.println("第二步:属性设置(spring对象注入,@Autowired、@Resource、@Value)");this.springBeanA = springBeanA;}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("第三步:属性设置后,调用InitializingBean接口的方法");}@PostConstructpublic void postConstructMethod() {System.out.println("(init方法调用前)@PostConstruct方法调用");}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println("(init方法调用前)SetBeanFactory回调接口");}@Overridepublic void setBeanName(String name) {System.out.println("(init方法调用前)setBeanName回调接口, name=" + name);}@Overridepublic void destroy() throws Exception {System.out.println("第四步:DisposableBean-->destroy方法调用");}@PreDestroypublic void testDestroy() {System.out.println("第四步(另一种方式):@PreDestroy方法调用");}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ConfigurationBeanTest {@Bean(initMethod = "initMethodTest",destroyMethod = "destroyTest")public SpringBean getBean() {return new SpringBean();}public static class SpringBean {public void initMethodTest() {System.out.println("第三步(另一种方式):@Bean(initMethod属性标识的方法)");}public void destroyTest() {System.out.println("第四步(另一种方式):@Bean(destroyMethod属性标识的方法)");}}
}

打印如下:

第一步:实例化(spring对象:SpringBeanA)
第二步:属性设置(spring对象注入,@Autowired、@Resource、@Value)
(init方法调用前)setBeanName回调接口, name=springBeanLifeCycle
(init方法调用前)SetBeanFactory回调接口
(init方法调用前)@PostConstruct方法调用
第三步:属性设置后,调用InitializingBean接口的方法
第三步(另一种方式):@Bean(initMethod属性标识的方法)
(Tomcat started)
第四步(另一种方式):@Bean(destroyMethod属性标识的方法)
第四步(另一种方式):@PreDestroy方法调用
第四步:DisposableBean-->destroy方法调用

说明:

实现接口BeanNameAware,可以让SpringBean知道自己的名字,做一些日志记录等操作;实现BeanFactoryAware是为了让SpringBean拥有访问BeanFactory的能力,从而可以根据需要使用beanFactory.getBean()获取别的SpringBean,但是要谨慎使用,因为这个可能会破坏Ioc的原则,尽可能使用@Autowired或者@Value注解使用别的SpringBean

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java测试题

String str2 "he""llo" xx.java--->xx.class----->内存 在由.java文件通过javac命令变为.class文件的过程中已经自动拼接变为“hello” String str2 "he"new String"llo" 在编译为,class文件时还是两个字符串“he”和“llo”…

SQLite 数据库:优点、语法与快速入门指南

文章目录 一、引言二、SQLite 的优点 💯三、SQLite 的基本语法3.1 创建数据库3.2 创建表3.3 插入数据3.4 查询数据3.5 更新数据3.6 删除数据3.7 删除表 四、快速入门指南4.1 安装 SQLite4.2 创建数据库4.3 创建表4.4 插入数据4.5 查询数据4.6 更新数据4.7 删除数据4…

无人机之无线传输技术!

一、Lightbridge和OcuSync图传技术 Lightbridge技术:这是大疆自主研发的一种专用通信链路技术,使用单向图像数据传输,类似于电视广播塔的数据传输形式。它主要采用2.4GHz频段进行传输,并且可以实现几乎“零延时”的720p高清图像传…

逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例

STM32C8T6控制SG90舵机 1.逻辑分析仪作用 逻辑分析仪在嵌入式开发中的作用非常重要,它是开发、调试和排错过程中的一个不可或缺的工具。具体来说,逻辑分析仪的作用包括以下几个方面: 1.信号捕获和分析: 逻辑分析仪能够实时捕获多个…

线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结

文章目录 1.二次型1.1 二次型、标准型、规范型、正负惯性指数、二次型的秩1.2 坐标变换1.3 合同1.4 正交变换化为标准型1.5 可逆线性变换和正交变换1.6 二次型化标准形,二次型化规范形的联系思考1.8 两个二次型联系的思考1.9 对于配方法问题的深入思考 2.二次型的主…

vue学习9

1.文章分类页面-element-plus表格 基本架子-PageContainer封装 按需引入的彩蛋&#xff0c;components里面的内容都会自动注册 用el-card组件&#xff0c;里面使用插槽或具名插槽 文章分类渲染 & loading处理 序号&#xff1a; <el-table-column type"index"…

Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)

本篇文章会分基于DeepSeek开放平台上的API&#xff0c;以及本地私有化部署DeepSeek R1模型两种方式来整合使用。 本地化私有部署可以参考这篇博文 全面认识了解DeepSeek利用ollama在本地部署、使用和体验deepseek-r1大模型 Spring版本选择 根据Spring官网的描述 Spring AI是一…

硬件电路(10)-二极管

一、概述 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件。它具有单向导电性能&#xff0c; 即给二极管阳极和阴极加上正向电压时&#xff0c;二极管导通。 当给阳极和阴极加上反向电压时&#xff0c;二极管截止。 因此&#xff0c;二极管的导通和截止&#xff0c;则相…

智慧农业-虫害及生长预测

有害生物防控系统是一个综合性的管理体系&#xff0c;旨在预防和控制对人类生活、生产甚至生存产生危害的生物。这些生物可能包括昆虫、动物、植物、微生物乃至病毒等。 一、系统构成 1、监测预警系统&#xff1a;利用智能传感器、无人机、遥感技术等手段&#xff0c;实时监测…

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API&#xff0c;通常需要以下步骤&#xff1a; 1. 获取 DeepSeek API 密钥 首先&#xff0c;确保你已经在 DeepSeek 平台上注册并获取了 API 密钥&#xff08;API Key&#xff09;。如果没有&#xff0c;请访问 DeepSeek 的官方网站注册并申请 …

DeepSeek 助力 Vue 开发:打造丝滑的返回顶部按钮(Back to Top)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Github自定义readme文件 个人主页简介 模版

自己写的 样式 # &#x1f44b; Hi bro , Im Dduo ! Glad to meet you &#x1f601;&#x1f60d;&#x1f61c;- &#x1f4da; Im Dduo, a student. Feel free to reach out if youd like to chat or collaborate! &#x1f60a; - &#x1f4ac; Dont hesitate to reach …

【工业安全】-CVE-2022-35561- Tenda W6路由器 栈溢出漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1&#xff1a;代码分析 4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2022-35561 漏洞名称&#xff1a;Tenda W6 栈溢出漏洞 威胁等级&#xff1a;高危 漏洞详情&#xff1…

CondaValueError: Malformed version string ‘~‘: invalid character(s)

CondaValueError: Malformed version string ‘~‘: invalid character(s) 送一张 GPT plus 、 deepseek-R1 满血 体验卡&#xff5e; https://bbs.csdn.net/topics/619568415 ​ 报错原因 使用conda安装一些库时出现以下报错&#xff1a; CondaValueError: Malformed versio…

渗透利器:YAKIT 工具-基础实战教程.

YAKIT 工具-基础实战教程. YAKIT&#xff08;Yak Integrated Toolkit&#xff09;是一款基于Yak语言开发的集成化网络安全单兵工具&#xff0c;旨在覆盖渗透测试全流程&#xff0c;提供从信息收集、漏洞扫描到攻击实施的自动化支持。其核心目标是通过GUI界面降低Yak语言的使用…

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…

数据结构(6)

注意&#xff1a;只有前序和中序或者后序和中序才能还原二叉树。 1.创建一个二叉树 2.遍历一个二叉树&#xff08;前序遍历&#xff0c;后序和中序遍历与此类似&#xff09; 3.寻找二叉树的节点个数和层数 4.销毁二叉树 5.层序遍历

LabVIEW用户界面设计原则

在LabVIEW开发中&#xff0c;用户界面&#xff08;UI&#xff09;设计不仅仅是为了美观&#xff0c;它直接关系到用户的操作效率和体验。一个直观、简洁、易于使用的界面能够大大提升软件的可用性&#xff0c;尤其是在复杂的实验或工业应用中。设计良好的UI能够减少操作错误&am…

大语言模型入门

大语言模型入门 1 大语言模型步骤1.1 pre-training 预训练1.1.1 从网上爬数据1.1.2 tokenization1.1.2.1 tokenization using byte pair encoding 1.3 预训练1.3.1 context1.3.2 training1.3.3 输出 1.2 post-training1.2.1 token 1.2 SFT监督微调1.3 人类反馈强化学习1.3.1 人…

Windows 11 下 Ollama 安装与 OpenWebUI 调用 DeepSeek-R1 的详细指南

文章目录 Windows 11 下 Ollama 安装与 OpenWebUI 调用 DeepSeek-R1 的详细指南一、Ollama 的安装与配置1. 下载 Ollama2. 安装 Ollama3. 验证 Ollama 安装 二、部署 DeepSeek-R1 模型1. 拉取 DeepSeek-R1 模型2. 启动 DeepSeek-R1 模型 三、OpenWebUI 的安装与配置1. 安装 Pyt…