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

news2025/1/19 3:12:37

目录标题

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

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


@PostConstruct注解

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

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

@EventListener方式

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

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

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

@Slf4j
@Component
public class EventListenerTest {
    @EventListener
    public 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;
    }
    
    @Override
    public 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注释对其进行排序。
     */
    @Override
    public 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 {

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

实现ServletContextListener接口contextInitialized方法

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

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

实现ServletContextAware接口setServletContext 方法

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

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

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

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

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

相关文章

性能测试流程、指标及常见问题!

1.介绍性能测试流程 a.性能需求分析&#xff08;评审&#xff09; 基于接口或者场景&#xff08;全链路&#xff09;的性能测试指标&#xff0c;一般是tps&#xff08;每秒事务数&#xff0c;这里都是通过的事务&#xff09;及art&#xff08;平均响应时间&#xff09; b.了解…

基于ssm vue的风景文化管理平台源码和论文

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;基于vue的木里风景文化管理平台也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对…

2-1、地址加法器CS:IP

语雀原文链接 文章目录 1、CPU组成2、通用寄存器16位寄存器的存储16位寄存器兼容8位word 和 byte进位问题 3、地址加法器不同的段地址和偏移地址表示同一个物理地址偏移地址的范围一个段的起始地址一定是16的倍数 4、CS:IPCS IP工作过程jmp修改CS:IP 5、DS和[address]DS和[add…

四.多表查询

多表查询 1.一个案例引发的多表连接1.1案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3案例分析与问题解决 2.多表查询分类讲解分类1&#xff1a;等值连接vs非等值连接分类2&#xff1a;自连接vs非自连接分类3&#xff1a;内连接vs外连接 3.SQL99语法实现多表…

记录华为云服务器(Linux 可视化 宝塔面板)-- Nginx配置出现500错误记录

文章目录 1、路由配置&#xff0c;访问显示500如有启发&#xff0c;可点赞收藏哟~ 1、路由配置&#xff0c;访问显示500 错误如图显示500 解决思路如下 1、先查看错误日志 错误日志存放位置 提示 /login配置的文件有问题 开始配置如下图 修改前 修改后&#xff08;即在/l…

题目:小明的彩灯(蓝桥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],…

深度学习之网络优化与正则化

视频链接&#xff1a;7.1 神经网络优化的特点_哔哩哔哩_bilibili 神经网络优化的特点 网络优化的难点 &#xff08;1&#xff09;网络结构差异大&#xff1a;不同模型之间的结构差异大——没有通用的优化算法、超参数多 &#xff08;2&#xff09;非凸优化问题&#xff1a;…

gitee上合并分支

点击pull requests 这个合并代码的位置找了半天没有找到&#xff0c;最后还是搜到才知道

华为云软件冗余依赖智能消除技术Slimming取得重大突破,相应文章已被软工顶会ICSE 2024录用

由于构建工具对软件库的自动化配置管理&#xff0c;使得现代软件项目在版本演化的过程中&#xff0c;引入大量的第三方软件库&#xff0c;依赖树结构日益臃肿。然而&#xff0c;实际上很多引入的软件库并未被真正使用。臃肿的依赖在资源受限的设备上将严重影响代码的性能、增加…

C++智能指针及简单实现

C智能指针 堆内存、栈内存与静态内存静态内存栈内存堆内存 动态内存管理new、delete运算符智能指针实现智能指针 shared_ptr智能指针的线程安全问题解决 unique_ptrweak_ptr循环引用 思维导图本模块思路 动态内存管理 - cppreference.com 堆内存、栈内存与静态内存 静态内存 …

会声会影2024购买多少钱 会声会影在哪里购买

掌握视频编辑技术&#xff0c;能为我们的工作和生活带来很多帮助。例如&#xff1a;将我们精心编辑的视频&#xff0c;上传到抖音、快手等平台进行变现&#xff1b;通过天马行空的视频创意&#xff0c;摇身一变成为B站up主。因此&#xff0c;拥有一款像会声会影这样的视频编辑软…

ATFX汇市:澳洲联储12月决议维持基准利率不变,AUDUSD短线大跌

ATFX汇市&#xff1a;12月5日&#xff0c;澳洲联储利率决议结果显示&#xff0c;将现金利率目标维持在4.35%不变 金融衍生品结算余额的支付利率维持在4.25%不变&#xff0c;符合市场预期。政策声明中提到&#xff1a;更加确定通货膨胀将会在合理的时间内返回目标&#xff1b;劳…

8.HTTP工作原理

HTTP是什么 HTTP工作原理 HTTP协议的请求类型和响应状态码 总结 1.HTTP是什么 HTTP超文本传输协议就是在一个网络中上传下载文件的一套规则 2.HTTP工作原理 HTTP超文本传输协议的本质是TCP通信&#xff0c;链接—>请求—>响应—>断开 3.HTTP协议的请求类型和响应状…

深入理解强化学习——马尔可夫决策过程:占用度量-[基础知识]

分类目录&#xff1a;《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程&#xff1a;贝尔曼期望方程-[基础知识]》中提到&#xff0c;不同策略的价值函数是不一样的。这是因为对于同一个马尔可夫决策过程&#xff0c;不同策略会访问到的状态的概率分布是…

ssm的网上奶茶店系统(有报告)。Javaee项目。

演示视频&#xff1a; ssm的网上奶茶店系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybat…

相关基础知识

本文引注&#xff1a; https://zhuanlan.zhihu.com/p/447221519 1.方差 2.自协方差矩阵 3.自相关矩阵 4.互协方差矩阵 5.互相关矩阵 6.相关系数 7.自相关函数、自协方差函数与功率谱密度 8.互相关函数、互协方差函数与互功率谱密度

指针基础知识超详细讲解(C语言)(上)

还在为不懂指针而感到烦恼么&#xff1f;那还在等什么呢快来看看吧&#xff01;冲冲冲&#xff01; 文章目录 1&#xff0c;认识指针2&#xff0c;指针变量指针变量的定义指针变量的大小const修饰指针变量 3&#xff0c;指针的运算4, 野指针概念成因规避 5&#xff0c; assert…

Sketch利器大公开:十款使用率超高的懒人插件汇总

在设计领域&#xff0c;Sketch以其高效小巧的优势赢得了众多设计团队的青睐&#xff0c;帮助全球设计师创作了许多令人难以置信的作品。在使用Sketch的过程中&#xff0c;辅助使用一些Sketch插件可以让我们更有效地完成设计任务。在本文中&#xff0c;我们将揭示大厂设计师的收…

Mysql主从复制原理和三种复制:异步、同步、半同步(主的binlog、从的relaylog)

借鉴&#xff1a;https://zhuanlan.zhihu.com/p/651625709 https://www.jb51.net/article/258847.htm 一&#xff1a;Mysql主从复制原理 MySQL的复制原理分三步 1.在主库上把数据更改&#xff0c;记录到二进制日志&#xff08;Binary Log&#xff09;中。 2.从库将主库上的日志…

分享86个选项卡TABJS特效,总有一款适合您

分享86个选项卡TABJS特效&#xff0c;总有一款适合您 86个选项卡TABJS特效下载链接&#xff1a;https://pan.baidu.com/s/1NBtPP2tT5YQqi6c744tCqg?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0…