springboot bean的生命周期

news2024/11/28 4:41:06

Spring Boot是一个非常流行的Java框架,它提供了许多功能,使开发人员可以快速构建和部署应用程序。其中一个非常重要的功能是Spring Boot Bean的生命周期。在本文中,我们将深入探讨Spring Boot Bean的生命周期,以及如何最大化利用它们。

什么是Spring Boot Bean?

在Spring Boot中,Bean是一个由Spring IoC容器管理的对象。Bean可以是任何Java对象,包括数据访问对象,服务对象,控制器等。Spring Boot IoC容器负责创建,配置和管理这些Bean。当我们需要一个Bean时,我们可以在Spring Boot应用程序中注入它。

Spring Boot Bean的生命周期

Spring Boot Bean的生命周期包括以下阶段:

  1. 实例化:当Spring Boot IoC容器启动时,它会扫描应用程序中的所有类,并实例化所有的Bean对象。

  2. 属性注入:在实例化Bean对象后,Spring Boot IoC容器将注入Bean的所有属性。这些属性可以是其他Bean,也可以是简单的值。

  3. BeanPostProcessor处理:在属性注入之后,Spring Boot IoC容器将调用所有BeanPostProcessor对象的postProcessBeforeInitialization()方法。这允许开发人员在Bean初始化之前对其进行自定义处理。

  4. 初始化:在BeanPostProcessor处理之后,Spring Boot IoC容器将调用Bean的初始化方法。这个方法可以是自定义的init()方法,也可以是实现InitializingBean接口的afterPropertiesSet()方法。

  5. BeanPostProcessor处理:在初始化之后,Spring Boot IoC容器将再次调用所有BeanPostProcessor对象的postProcessAfterInitialization()方法。这允许开发人员在Bean初始化之后对其进行自定义处理。

  6. 销毁:当Spring Boot应用程序关闭时,Spring Boot IoC容器将销毁所有Bean对象。这个方法可以是自定义的destroy()方法,也可以是实现DisposableBean接口的destroy()方法。

如何最大化利用Spring Boot Bean的生命周期?

  1. 使用BeanPostProcessor:BeanPostProcessor是一个非常强大的工具,可以让开发人员在Bean初始化之前和之后对其进行自定义处理。这可以用来解决许多常见的问题,例如Bean属性的加密和解密。

  2. 实现InitializingBean和DisposableBean接口:实现这些接口可以让开发人员在Bean初始化和销毁时执行自定义逻辑。这可以用来清理资源,关闭数据库连接等。

@Component
public class BeanDemo implements InitializingBean,DisposableBean{

	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("========== Bean 初始化了 ==========");
	}

	@Override
	public void destroy() throws Exception {
		System.out.println("========== Bean 销毁了 ==========");
	}

}

  1. 使用@PostConstruct和@PreDestroy注解:这些注解可以用来标记Bean初始化和销毁方法。这使得代码更加清晰,并且可以避免一些常见的错误。
@SpringBootApplication
public class SpringBootBeanDemoApplication {
	//bean容器
	 public static ConfigurableApplicationContext ac;
	 
	public static void main(String[] args) {
		ac = SpringApplication.run(SpringBootBeanDemoApplication.class, args);		
	}

}
@Component
@Scope("singleton")
public class BeanDemo{

	@PostConstruct
	public void afterProperties() throws Exception {
		System.out.println("========== Bean 初始化了 ==========");
	}

	//PreDestroy注释在方法上用作回调通知,表明实例正在**中被移除的过程中,它不是您的应用程序的预关闭
	//因此在运行的应用程序中使用ctrl-c或kill 时,@PreDestroy不会生效
	//@Scope()里面的值需要为singleton,即单例,如果为 prototype ,则同样不能执行@PreDestroy方法
	@PreDestroy
	public void destroy2() throws Exception {
		System.out.println("========== Bean 销毁了 ==========");
	}
	
}
@Controller
class Test{
	@GetMapping(value = "test")
	public void testDestroy() {
		SpringBootBeanDemoApplication.ac.close();
		
	}
}

在浏览器中调用:http://127.0.0.1:8080/test
在这里插入图片描述

总结

Spring Boot Bean的生命周期是一个非常重要的概念,它可以帮助开发人员最大化利用Spring Boot框架的功能。在本文中,我们深入探讨了Spring Boot Bean的生命周期,并提供了一些最佳实践,以帮助开发人员编写更好的代码。如果您正在使用Spring Boot框架,那么了解Bean的生命周期是非常重要的。

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

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

相关文章

光伏发电系统最大功率跟踪控制MATLAB仿真模型(电导增量法+扰动观察法)

光伏发电系统最大功率跟踪控制MATLAB仿真模型(电导增量法扰动观察法参考文献)资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87878528 模型介绍: 模型主要包含光伏电池模块、直流升压模块、以及最大功率跟踪控制模块。…

深度学习--神经网络全面知识点总结(持续更新中)

文章目录 神经网络基础1.1 什么是神经网络?1.2 神经元和激活函数1.3 前向传播和反向传播1.4 损失函数和优化算法 深度神经网络2.1 卷积神经网络(CNN)2.2 循环神经网络(RNN)2.3 长短期记忆网络(LSTM&#xf…

C#可视化 商品信息管理系统(具体做法及全部代码)

目录 题目: 效果图: 数据库: 做法: 主页面添加menustrip,之后添加两个窗体双击事件,双击下拉区域就好了。 添加界面 查询按钮功能 datagirdview设置 全部代码: DBHelper类 From1主窗体代…

【并发篇】01 java中的线程状态

Java线程分为6种状态: (1)新建NEW:用new关键字创建的线程就是新建状态,这时候还没有和系统底层真正的线程关联起来,还仅仅只是一个java对象,所以这个时候这个线程不会被系统分配给cpu。 &#…

【云原生】docker

容器化越来越受欢迎,因为容器是: ●灵活:即使是最复杂的应用也可以集装箱化。 ●轻量级:容器利用并共享主机内核。 ●可互换:可以即时部署更新和升级。 ●便携式:可以在本地构建,部署到云&#…

shel脚本基础1——变量基础、脚本运算符

文章目录 一、变量基础二、bash变量类型三、脚本基础知识3.1 脚本测试命令3.2 shell运算符3.3 命令逻辑关系3.4 bash条件判断3.4.1 条件测试的表达式3.4.2 整数测试3.4.2 字符测试3.4.3 文件测试3.4.4 组合测试条件 一、变量基础 变量的含义: 变量可以通过变量名访问…

5.数据结构期末复习之图以及相关算法

1.应用: 教学计划(先修什么才能修什么课程)社交网络地图导航 2.什么是图? 顶点(有穷非空个)顶点的边 ,抽象为G(V,E) (Vert,Edge) 1.无向图: 点到点都可以到达 表示为(vi,vj) 2.有向图 只能一个点到另外一个点 表示为<vi,vj> 又分为: 1.非带权图(上面的例子就是) 2.带权图…

Day29

TCP_SER #include <myhead.h>//定义处理错误的宏函数 #define ERR_MSG(msg) do{\fprintf(stderr,"line:%d %s %s",__LINE__, __FILE__, __func__);\perror(msg);\ }while(0)//定义IP和端口号 #define IP "192.168.2.186" #define PORT 6666int …

数组的定义方式及访问

问题 如何创建及访问数组。 方法 了解数组的概念 数组就是存储多个数据的容器&#xff0c;数组的长度固定&#xff0c;多个数据的数据类型要一致。 数组的三种定义方式 数据存储的数据类型[] 数组名字 new 数组存储的数据类型[长度] 数据类型[] 数组名 new 数据类型[]{元素…

测试人35岁何去何从?软件测试路在何方?“我“一路升级打怪...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试员干到35岁&a…

暑期健身房招生活动文案分享,在线传单设计

想要有效地宣传健身房的信息&#xff0c;还能够吸引学员了解报名的宣传单要怎么制作&#xff1f;不用自己动手设计&#xff0c;借助在线模板和在线设计工具&#xff0c;一键就能生成专属的招生传单。以下是在线招生传单设计教程和传单设计模板使用教程。 首先找到一个在线设计工…

Juypter更改默认路径,并且解决改完默认路径不自动跳转的问题

目录 更改默认路径 第一步先在你所安装的juypter的环境下输入下面代码 第二步在自己的文件夹下找到这个目录&#xff0c;用记事本打开 第三步更改快捷方式 解决浏览器不调转方法 相对于juypter来讲&#xff0c;还是挺好用的&#xff0c;自我感觉比pycharm更好一点。 juypt…

ES6中 Promise和使用场景

介绍 &#x1f959;&#x1f959;&#x1f959;更加合理和更加强大 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;回调函数&#xff09;更加合理和更加强大 在以往我们如果处理多层异步操作&#xff0c;我们往往…

群晖服务器被encrypted勒索病毒攻击后的表现与如何解密勒索病毒

群晖服务器是一种高效的数据管理方案&#xff0c;但是如果被Encrypted勒索病毒感染&#xff0c;可能会导致许多重要的数据会丢失。Encrypted勒索病毒将加密被感染服务器上的文件&#xff0c;导致它们无法打开。一旦我们遭到encrypted勒索病毒攻击&#xff0c;建议大家选择专业的…

【Web开发技术】异常处理机制的使用

文章目录 一、引言1、应用场景2、语法3、体系 二、详细设计&#xff08;后端开发&#xff09;1、信息提示常量类2、自定义异常3、Model层4、Controller层5、View层 一、引言 编程也有很久的时间了&#xff0c;如果每个报的错误和寻找的答案写成一张纸&#xff0c;叠加起来也得有…

JAVA项目代码几乎没有改动,重新发布后突然报错,无法启动

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后突然报错&#xff0c;无法启动 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后…

2023年PMP 续证的费用和流程最全介绍

PMP证书并不是终身有效的&#xff0c;是需要三年一续的&#xff0c;PMI会在有效期截止前给持证者发邮件提示换证&#xff08;续证&#xff09;。目前的续证费用为150美金和积满60个PDU&#xff0c;60个PDU是在证书三年有效期内积满就可以&#xff0c;像我的培训机构艾威每周都会…

当Mysql缓慢时,这几招可解燃眉之急

第一步定位问题源&#xff1a; 常见的以查询Mysql性能问题的方法 1.大部分的性能问题都是查询过慢的问题&#xff0c;可以查询慢sql日志。 通过慢查询日志定位那些执行效率较低的SQL语句&#xff0c;用–log-slow-queries[ file_name]选项启动时&#xff0c;mysqld写一个包含所…

售后退换货客服话术

在客服的工作生涯里&#xff0c;售后退换货这种问题&#xff0c;对于我们客服来说可以说是见惯不惯了。今天小编给大家准备了一些退换货的售后回复话术&#xff0c;让大家工作起来更加高效。 一、引导退换货 1.亲&#xff0c;麻烦您收到后请先试穿&#xff0c;请一定要保持衣服…

WordPress入门版,保姆级记录

服务器里用户越近&#xff0c;访问速度越快&#xff0c;所以需要根据用户群体选择合适的服务器 国外网站&#xff1a;SiteGround国内网站&#xff1a;阿里云 bidewang.co/sg WordPress托管服务器页面&#xff0c;一般选择第二个套餐 没有域名则选择购买域名 然后填选购买信息…