Spring容器启动过程中的自定义操作插口汇总

目录标题

    • @PostConstruct注解
    • @EventListener方式
    • InitializingBean的afterPropertiesSet方法
    • 实现ApplicationRunner接口重写run方法
    • 实现AplicationContextAware接口重写setApplicationContext
    • 实现ServletContextListener接口contextInitialized方法
    • 实现ServletContextAware接口setServletContext 方法

下面是总结的几种Spring容器启动时,做自定义初始化操做的方法;也是比较常用,一般做缓存预热,生成消费者启动,数据加载等操作,先于程序运行之前进行数据准备。


@PostConstruct注解

将要执行的方法所在的类交个Spring容器扫描(@Component),并且在要执行的方法上添加@PostConstruct注解执行,它用于指定一个方法在Bean被初始化后自动调用,用于执行一些特定的初始化逻辑,如建立数据库连接、加载配置文件、启动线程等。

@Slf4j
@Component
public class PostConstructTest {@PostConstructpublic void postConstruct() {log.info("启动时自动执行  @PostConstruct 注解方法");}
}

@EventListener方式

将要执行的方法所在的类交个Spring容器扫描(@Component),并且在要执行的方法上添加@EventListener注解执行
用于监听Spring事件并执行相应的操作。使用@EventListener注解的方法可以用来处理Spring中的各种事件

使用@EventListener注解的方法有以下要求:

方法必须是非静态的。
方法的参数可以是Spring框架中的事件对象或自定义的对象,方法只会接收与其参数类型匹配的事件。
方法返回类型可以是任意类型,但通常是void类型。

@Slf4j
@Component
public class EventListenerTest {@EventListenerpublic void handleContextRefreshed(ContextRefreshedEvent event) {System.out.println("ContextRefreshedEvent received.");}
}

InitializingBean的afterPropertiesSet方法

这个是在bean 初始化的时候执行
在这里插入图片描述
通过实现InitializingBean 接口,然后重写afterPropertiesSet()方法,当Bean的属性设置完成后,Spring容器会自动调用该方法。

使用示例如下

public class MyBean implements InitializingBean {private String name;public void setName(String name) {this.name = name;}@Overridepublic void afterPropertiesSet() throws Exception {// 在属性设置完成后执行的初始化逻辑,这里面可以做一些数据初始化,本地缓存预热等操做System.out.println("Bean '" + name + "' is being initialized...");}
}

afterPropertiesSet()方法是InitializingBean接口中定义的一个方法,用于在Bean属性设置完成后执行一些初始化逻辑,可以通过实现该接口来实现自定义的初始化行为。


实现ApplicationRunner接口重写run方法

@Component
public class ApplicationRunnerImpl implements ApplicationRunner {/*** 用于指示bean包含在SpringApplication中时应运行的接口。可以定义多个ApplicationRunner bean* 在同一应用程序上下文中,可以使用有序接口或@order注释对其进行排序。*/@Overridepublic void run(ApplicationArguments args) throws Exception {log.info("启动时自动执行 ApplicationRunner 的 run 方法");Set<String> optionNames = args.getOptionNames();for (String optionName : optionNames) {log.info("这是传过来的参数[{}]", optionName);}String[] sourceArgs = args.getSourceArgs();for (String sourceArg : sourceArgs) {log.info("这是传过来sourceArgs[{}]", sourceArg);}}
}

实现AplicationContextAware接口重写setApplicationContext

当一个Bean实现了该接口并重写了setApplicationContext方法,Spring容器会在Bean创建后自动调用这个方法,将容器的上下文对象ApplicationContext传递给该方法。

@Component
public class MyBean implements ApplicationContextAware {@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {this.applicationContext = applicationContext;// 在这里可以添加一些初始化的操作}
}

实现ServletContextListener接口contextInitialized方法

该方法会在填充完普通Bean的属性,但是还没有进行Bean的初始化之前执行

@Component
public class ServletContextListenerImpl implements ServletContextListener {/*** 在初始化Web应用程序中的任何过滤器或Servlet之前,将通知所有ServletContextListener上下文初始化。*/@Overridepublic void contextInitialized(ServletContextEvent sce) {log.info("启动时自动执行 ServletContextListener 的 contextInitialized 方法");}
}

实现ServletContextAware接口setServletContext 方法

它会在填充普通bean属性之后但在初始化之前调用

@Component
public class ServletContextAwareImpl implements ServletContextAware {/*** 在填充普通bean属性之后但在初始化之前调用* 类似于InitializingBean's 的 afterPropertiesSet 或自定义init方法的回调*/@Overridepublic void setServletContext(ServletContext servletContext) {log.info("启动时自动执行 ServletContextAware 的 setServletContext 方法");}
}

如有遗漏,欢迎补充,最后感谢您的阅览!

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

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

相关文章

7个简单技巧,让你从容应对压力面试!

01-什么是压力面试&#xff1f; 压力面试是指有意制造紧张&#xff0c;以了解求职者将如何面对工作压力的一种面试形式。 事实上&#xff0c;压力面试不是单独存在的一类面试&#xff0c;往往是穿插在面试过程中。 面试人通过提出不礼貌、冒犯的问题&#xff0c;或者用怀疑、…

【1day】蓝凌OA 系统custom.jsp 接口远程命令执行漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现

梦回吹角连营(2)(快速幂快乘)

Description 给定f(n)(a1)*n^a(a2)*n^(a1)...b*n^(b-1) 求f(n)%10000000033 Input 输入一个正整数T(T<10),表示有T组数据&#xff0c;每组数据包括三个整数a,b,n (0<n<10^9,1<a < b-1<10^20) Output 输出 f(n)%10000000033 的结果 Sample Input 1 1 2…

【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南 第一章&#xff1a;什么是提示工程&#xff1f; 提示工程是创建提示或询问或给出指令的过程&#xff0c;这些指令指导像ChatGPT这样的语言模型的输出。 它允许用户控制模型的输出并生成适合他们特定需求的文…

十三、FreeRTOS之FreeRTOS时间管理

本节主要介绍以下内容&#xff1a; 1&#xff0c;延时函数介绍&#xff08;了解&#xff09; 2&#xff0c;延时函数解析&#xff08;熟悉&#xff09; 3&#xff0c;延时函数演示实验&#xff08;掌握&#xff09; 4&#xff0c;课堂总结&#xff08;掌握&#xff09; 一、…

最新测试开发招聘信息汇总,内含社招和实习生岗位~

1 科大讯飞 [武汉/合肥/西安] 科大讯飞&#xff08;教育事业部&#xff09; - 移动、服务端高级测试开发工程师 一、移动方向高级测试开发工程师 岗位职责&#xff1a; 1.负责教育 BG 中 APP/SDK/软硬一体等产品类型的专项测试工作&#xff0c;包括专项测试方案设计、自动化测…

通过时间交织技术扩展ADC采样速率的简要原理

前言 数据采集是将自然界中存在的模拟信号通过模数转换器&#xff08;ADC&#xff09;转换成数字信号&#xff0c;再对该数字信号进行相应的接收和处理。数据采集系统作为数据采集的手段&#xff0c;在移动通信、图向采集、无线电等领域有重要作用。随着电子信息技术的飞速发展…

【计算机系统基石与Linux进程管理深度解析】

​​​​​​​ 【本节重点】 认识冯诺依曼系统 操作系统概念与定位 深入理解进程概念&#xff0c;了解PCB 学习进程状态&#xff0c;学会创建进程&#xff0c;掌握僵尸进程和孤儿进程&#xff0c;及其形成原因和危害 1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如…

IO / day03 作业

1. 使用文件IO完成对图像的读写操作 代码 #include<myhead.h>int main(int argc, const char *argv[]) {int fd-1;if((fd open("./bird.bmp", O_RDWR)) -1){perror("fopen error");return -1;}//读取该图片的大小&#xff0c;需要将光标向后偏移…

通过pipeline配置sonar自动化实现过程解析

这篇文章主要介绍了通过pipeline配置sonar自动化实现过程解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.sonar配置webhooks&#xff0c; 2.url填写jenkins的地址&#xff1a;http://jenkinsurl/sonarqu…

高低压供配电智能监控系统

高低压供配电智能监控系统是一种综合运用物联网、云计算、大数据和人工智能等技术的智能化监控系统&#xff0c;用于实时监测高低压供配电设备的运行状态和电能质量&#xff0c;及时发现和处理供配电系统中存在的问题&#xff0c;提高供配电系统的安全性和可靠性。依托电易云-智…

JavaScript 数组

JavaScript 数组 用来存储一系列相关数据的一种数据类型 创建数组 字面量方式 ----- [1,2,3,4,5,6];实例化构造函数 ----- new Array(1,2,3,4,5,6);组成数组的元素可以是任意的数据类型包括数组本身&#xff1b; new Array(n): n 表示数组的长度 内容操作 获取&#xff08;查…

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台&#xff0c;用户只需要为Agent指定一个名称和目标&#xff0c;就可以在浏览器中链接大型语言模型&#xff08;如GPT-4&#xff09;来创建和部署Agent平台。 PS&#xff1a;目前agentGPT仅支持chatgpt模型&#xff0c;暂时不支持本地llm模…

怎么让CMake不使用VS作为构建工具,而是使用gcc

2023年12月5日&#xff0c;周二晚上 要让 CMake 使用 gcc 而不是 Visual Studio 作为构建工具&#xff0c;可以通过指定生成器来告诉 CMake 使用 gcc。 在运行 cmake 命令时&#xff0c;可以使用 -G 参数来指定生成器。 对于 gcc&#xff0c;可以使用 "Unix Makefiles&q…

调查显示 IT 服务事件越来越频繁

事件管理平台提供商 Transposit 对美国 1,000 名 IT 运营、DevOps、站点可靠性工程 (SRE) 和平台工程专业人士进行的一项调查发现&#xff0c;超过三分之二 (67%) 的人发现故障率有所增加过去 12 个月中影响客户的服务事件的频率。 今天在Kubecon CloudNative会议上宣布的调查…

102.套接字-Socket网络编程4(TCP通信流程)

目录 TCP编程流程 套接字函数 1.创建套接字 2.绑定地址 3.监听连接请求 4.接受连接 5. 连接到服务器 6. 发送数据 7. 接收数据 8.关闭套接字 服务器端通信流程 示例代码 客户端通信流程 代码示例 TCP编程流程 TCP是一个面向连接的&#xff0c;安全的&#xff0c;流…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中泛型技术体系的原理和实战开发指南

深入探索Java特性中泛型技术体系的原理和实战开发指南 前提介绍泛型的介绍泛型带来的好处泛型引发的问题错觉&#xff1a;泛型也可以实现多态 泛型的特点类型擦除概念定义案例分析隐患问题开发要点类型擦除的过程案例代码 实例分析类型转换问题 通配符与上下界通配符List<Ob…

在线测量大尺寸管材的测径仪有哪些?

工业高速发展的背后&#xff0c;离不开与之匹配的高端设备作为科研的支撑。品质检测仪器也在随着现代科技的发展而不断变化&#xff0c;随着科技的进步&#xff0c;各种大口径的管材、管道被生产制造出来&#xff0c;而对其外径尺寸的检测则因口径范围大而使得很少有仪器能进行…

美股电动汽车股票分析:蔚来和Rivian这两只都遭受了重创的股票,哪个更值得投资?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Rivian(RIVN)和蔚来(NIO)都是目前美股市场上最受关注的电动汽车股票。虽然蔚来在全球最大的电动汽车市场中国扮演着重要角色&#xff0c;但Rivian也击败了很多传统汽车制造商&#xff0c;并成为了第一家在美国推出全电动皮…