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.rhkb.cn/news/210858.html

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

相关文章

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗&#xff1f;MacDroid Pro for Mac 是您的最佳选择&#xff01;这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面&#xff0c;让您能够直接在Mac上…

WordPress插件大全-免费的WordPress插件汇总

随着互联网的不断发展&#xff0c;网站建设变得日益普及。对于大多数人而言&#xff0c;WordPress是一个熟悉且易于使用的网站建设平台。然而&#xff0c;有时候我们可能会觉得WordPress的功能还不够满足我们的需求&#xff0c;这时候&#xff0c;插件就成了解决问题的得力工具…

数据库管理-第122期 配置Halo数据库(202301204)

数据库管理-第122期 配置Halo数据库&#xff08;202301204&#xff09; 在120期完成了HaloDB的安装&#xff0c;那么紧接着就需要对数据库进行具体配置。 1 数据库配置 这里首先说一下我这里数据库的给的硬件配置&#xff1a;2个CPU&#xff0c;16GB内存 1 配置数据库访问控…

记录一下Mac配置SpringBoot开发环境

由于很多项目喜欢使用传统的 Java 8 进行开发&#xff0c;而且 Java 8 的稳定性也是经过长久考验的&#xff0c;我们接下来就尝试一下&#xff0c;在一台新的 Mac 中配置 Java 环境&#xff0c;并且开始创建 SpringBoot 项目。 首先&#xff0c;去 Oracle 官网下载 java8 JDK …

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

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

感冒 发烧 咳嗽记录

感冒 风寒: 清鼻涕 热感冒: 细菌记录, 脓鼻涕. 咳嗽 先是清痰咳嗽, 后是浓痰,细菌感染, 白细胞噬菌体, 所以要补充蛋白质,维生素. 胸骨上窝 , 天突穴 ,后面上支气管的位置, 往下会变成左右两支,连接到肺部 普通咳嗽: 用哈气拍打背部的方式. 把痰去除. 吃点 盐酸氨溴索片 增加支…

怎么让百度快速收录,百度SEO收录工具

百度收录对于一个网站的重要性不言而喻。拥有良好的百度收录意味着网站能够更好地被搜索引擎收录&#xff0c;为用户提供更精准的搜索结果。而怎样实现百度快速收录成为了许多网站管理员关注的焦点。 百度收录的重要性 百度是国内最大的搜索引擎之一&#xff0c;拥有数以亿计的…

蓝桥杯真题:四平方和-Java版

import java.io.*;/*先找后两个数for(int i 0; 2 * i * i < n;i)for(int j i; i * i j * j < n;j ) 再找前两个数 for(int i 0;4 * i * i < n; i )for(int j i;2 * (j * j i * i) < n;j )//这样就可以让后两个数尽量大,前两个数尽量小 这样就可以确定后…

题目:小明的彩灯(蓝桥OJ 1276)

题目描述&#xff1a; 解题思路&#xff1a; 一段连续区间加减&#xff0c;采用差分。最终每个元素结果与0比较大小&#xff0c;比0小即负数输出0。 题解&#xff1a; #include<bits/stdc.h> using namespace std;using ll long long; const int N 1e5 10; ll a[N],…

TrustZone之虚拟地址空间

在本系列中的内存管理指南介绍了多个虚拟地址空间或translation regimes的概念。例如&#xff0c;有一个用于EL0/1的translation regime&#xff0c;还有一个用于EL2的独立translation regime&#xff0c;如下所示&#xff1a; 还有专门的翻译方案用于安全状态和非安全状态。例…

Django HMAC 请求签名校验与 Vue.js 实现安全通信

概要 在 Web 应用的开发过程中&#xff0c;确保数据传输的安全性和完整性是一个不容忽视的问题。使用 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;算法对请求内容进行签名校验&#xff0c;是一种常见且有效的安全策略。本文将详细介绍如何在 Django …

Netty网络编程

入门案例 1、服务器端代码 public class HelloServer {public static void main(String[] args) {// 1、启动器&#xff0c;负责装配netty组件&#xff0c;启动服务器new ServerBootstrap()// 2、创建 NioEventLoopGroup&#xff0c;可以简单理解为 线程池 Selector.group(n…

EasyRecovery14破解版 v14.0.0.4 官方免费版(含激活码)

软件介绍 EasyRecovery14高级版是一款功能强大的数据恢复软件&#xff0c;软件对比家庭版本它的使用更加广泛&#xff0c;在恢复数据方面软件可以做到最完整的损失恢复&#xff0c;无论是文档、音乐、软件都可以一键恢复&#xff0c;同时软件还可以对文件的名字、后缀进行修改…

ROS2 galactic生成的bag包里的MarkerArray在humble下播放不正常

近期发现ROS2 galactic下生成的bag包在humble下回放时使用rviz可视化&#xff0c;bag里的点云可以正常看到&#xff0c;但是使用Marker和MarkerArray画的box却死活看不到&#xff0c;感觉很纳闷&#xff0c;看网上有人报告说foxy下生成的bag包在galactic下播放会报SQL错误&…

项目经理是干出来的,不是教出来的

大家好&#xff0c;我是老原。 有不少新手项目经理&#xff0c;在通过了PMP认证考试&#xff0c;拿到PMP证书后&#xff0c;对之前无序的项目管理状态感觉有了一丝通透的感觉&#xff0c;对接受新项目更是信心满满。 然后就有不少没有项目管理经验&#xff0c;且刚刚考取PMP证…

Redis Hash数据类型

Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型&#xff0c;它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中&#xff0c;哈希类型是指值本身又是一个键值对结构&#xff0c;形如key “key”&#xff0c;value {ffield1, value1 }, … {fieldN…

JDK 历史版本下载以及指定版本应用

参考&#xff1a; 官网下载JAVA的JDK11版本&#xff08;下载、安装、配置环境变量&#xff09;_java11下载-CSDN博客 Gradle&#xff1a;执行命令时指定 JDK 版本 - 微酷网 下载 打开官网地址 Java Downloads | Oracle 当前版本在这里&#xff0c;但是我们要下载历史版本 选…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

PostGIS学习教程十:空间索引

PostGIS学习教程十&#xff1a;空间索引 回想一下&#xff0c;空间索引是空间数据库的三个关键特性之一。空间索引使得使用空间数据库存储大型数据集成为可能。在没有空间索引的情况下&#xff0c;对要素的任何搜索都需要对数据库中的每条记录进行"顺序扫描"。索引通…

JSP 设置静态文件资源访问路径

这里 我们先在 WEB目录webapp 下创建一个包 叫 static 就用它来存静态资源 然后 我们扔一张图片进去 我们直接这样写 如下图 找到父级目录 然后寻找下面的 static 下的 img.png 运行代码 很明显 它没有找到 这边 我们直接找到 webapp目录下的 WEB-INF目录下的 web.xml 加入…