SpringBoot学习笔记四

news2024/11/28 20:45:57

SpringBoot学习笔记四-监听机制

  • 1. SpringBoot监听器
    • 1.1 无需配置
      • 1.1.1 CommandLineRunner使用
      • 1.1.2 ApplicationRunner的使用
      • 1.1.3 CommandLineRunner与ApplicationRunner的区别
    • 1.2 需要创建META-INF文件,并在其中创建spring.factories,配置相关的信息
      • 1.2.1 ApplicationContextInitialize
      • 1.2.2 SpringApplicationRunListener

1. SpringBoot监听器

在这里插入图片描述上述的四种监听器按照使用的方式可以分为两种:

1.1 无需配置

  • CommandLineRunner
  • ApplicationRunner:还需要写一个有参的构造函数
@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("MyCommandLineRunner...run");
        System.out.println(Arrays.asList(args));
    }
}
@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("MyApplicationRunner...run");
        System.out.println(Arrays.asList(args.getSourceArgs()));
    }
}

项目启动时,会自动执行上述的内容。

1.1.1 CommandLineRunner使用

日常开发中有可能需要实现项目启动后执行的功能,比如特殊数据处理,权限控制、缓存预热等
按照使用可以分为单个实现类和多个实现类,

  • 单个实现类如上面,无需指定执行顺序;
  • 多个实现类如果需要指定执行顺序,需要使用@Order注解来表明执行顺序
@Component
@Order(3)
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("MyCommandLineRunner...run");
        System.out.println(Arrays.asList(args));
    }
}

@Component
@Order(2)
public class MyCommandLineRunner1 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("MyCommandLineRunner1...run1");
        System.out.println(Arrays.asList(args));
    }
}
@Component
@Order(1)
public class MyCommandLineRunner2 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("MyCommandLineRunner2...run2");
        System.out.println(Arrays.asList(args));
    }
}

执行结果:
在这里插入图片描述注解@Order的执行级别是按照1最优先执行,后面依次执行。

1.1.2 ApplicationRunner的使用

spring容器启动完成之后,就会紧接着执行这个接口实现类的run方法。

run方法的参数: ApplicationArguments可以获取到当前项目执行的命令参数。(比如把这个项目打成jar执行的时候,带的参数可以通过ApplicationArguments获取到)
若有多个代码段需要执行,可用@Order注解设置执行的顺序。

1.1.3 CommandLineRunner与ApplicationRunner的区别

  • CommandLineRunner的方法参数是原始的参数,未做任何处理;
  • ApplicationRunner的参数为ApplicationArguments对象,是对原始参数的进一步封装。

1.2 需要创建META-INF文件,并在其中创建spring.factories,配置相关的信息

  • ApplicationContextInitialize
  • SpringApplicationRunListener

1.2.1 ApplicationContextInitialize

目前不去细研究,有兴趣可以看这篇博客:Springboot扩展点之ApplicationContextInitializer

1.2.2 SpringApplicationRunListener

详细内容看这篇博客:SpringApplicationRunListeners 监听器执

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

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

相关文章

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互,从而实现了Web请求的接收,处理和响应。 它的组件有如下几个: DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

make/makefile学习

文章目录 1、makefile函数1.1、字符串替换函数:subst1.2、模式字符串替换函数:patsubst1.3、去空格函数:strip1.4、查找字符串函数:findstring 2、、:、?区别 1、makefile函数 1.1、字符串替换函数:subst …

2000-2022年县域常住人口和户籍人口数据

2000-2022年县域常住人口和户籍人口数据/县常住人口及县户籍人口数据 1、时间:2000-2022年 2、来源:县域统计年鉴、各省年鉴 3、指标:户籍人口数、常住人口数 4、范围:县区级,具体县名单参看数据预览 5、缺失情况…

文心一言 VS 讯飞星火 VS chatgpt (233)-- 算法导论17.2 1题

一、假定对一个规模永远不会超过 k 的栈执行一个栈操作序列。执行 k 个操作后,我们复制整个栈来进行备份。通过为不同的栈操作赋予适合的摊还代价,证明: n 个操作(包括复制栈)的代价为 O(n) 。 文心一言: 为了证明对一个规模永远…

直播带货行业将迎来大地震

关注卢松松,会经常给你分享一些我的经验和观点。 为什么这么多人喊着关闭直播带货?实体经济是到底因为什么萧条的?为什么大街上冷冷清清的?是房租、虚高的价格、还是直播带货引起的? 在4月9日的国务院政策吹风会上,市场监管明确指出: …

MINI2440 开发板 给他干出来了

环境是ubuntu14.04。不要问我为什么是这个版本,因为之前的ubuntu12.04 环境干不出来,你去试试就知道了!各种资源包下载不下来。 输入启动参数: 进入MINI2440:别说心里一万个开心,启动完成,输入p…

关于HTTP1.0、1.1、1.x、2.0、3.0与HTTPS之间的理解

关于HTTP1.0、1.1、1.x、2.0、3.0与HTTPS之间的理解 HTTP的由来 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Eng…

【软件测试之判定表法】

【软件测试之判断表法】(蓝桥课学习笔记) 1、判定表法的概念 判定表又称“决策表”,是一种表格状的图形工具,适用于处理判断条件较多,各条件又相互组合、有多种决策方案的情况。由于决策表可以把复杂的逻辑关系和多种条件组合的情况表达的既…

最新国产中文版官网chatGPT镜像网站

分享5个国产中文版chatGPT镜像网站,希望可以帮助到您! 1️⃣ HiClaude3基于国外原版GPT模型、Claude模型开发,是资源丰富的全能镜像,适合各行各业的工作者。不仅有gpt,而且还支持图片对话、文件对话,轻松解…

zookeeper解析

目录 zookeeper定义 zookeeper定义 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目 Zookeeper工作机制 zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心…

.a和.so库文件是什么?

我们在编译开源代码后,通常会生成.a和.so这两个库文件,这两个文件有什么区别?又如何使用? 在 Linux 中,.a 和 .so 文件都是库文件,但它们有一些区别: 静态库文件(.a)&am…

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

文章目录 1)数字三角形1:顺推2:逆推 2)最长上升子序列1:线性DP做法2:二分优化 3)最长公共子序列4)最长公共子串5)字符串编辑距离 1)数字三角形 1&#xff1a…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代,闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心,结合运动控制卡及驱动器模块,设计并实现了一个闭环步进电机的多轴运动控制系…

内核驱动更新

1.声明我们是开源的 .c 文件末尾加上 2.在Kconfig里面修改设备,bool(双态)-----》tristate(三态) 3.进入menuconfig修改为M 4.编译内核 make modules 也许你会看到一个 .ko 文件 5.复制到根目录文件下 在板子…

XAI有什么用?探索LLM时代利用可解释性的10种策略

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 你是否也好奇,在大模型时代,可解释性人工智能技术(XAI&am…

SAP ABAP 连接外部数据库

前言 SAP 连接外部数据库有多种方法,这里我们介绍DBCO 连接 DBCO 代码 DATA: OREF TYPE REF TO CX_ROOT,TXT TYPE STRING,M_WERKS TYPE WERKS_D,STRCDATE TYPE C LENGTH 10. DATA:BEGIN OF T_ITEM OCCURS 0, CDATE TYPE C LENGTH 10, END OF T_ITEM. M…

八款禁用U盘的软件

八款禁用U盘的软件禁用U盘的软件通常用于企业或组织环境中,以防止未经授权的USB设备接入计算机,从而保护数据安全、防止病毒传播或限制员工使用U盘。以下是一些可以禁用U盘的软件推荐。 1、安企神软件 权限设置:为终端电脑设置使用权限&…

Terraform 语法配置

配置语法 Terraform 的配置文件都是以 .tf 为后缀Terraform 支持两种模式 HCL、JSON Provider 插件 providers 地址:Terraform Registry Terraform 通过 provider 管理基础设施,使用 provider 与云供应商 API 进行交互,每个 Provider 都包含…

OSCP靶场-- Sybaris

OSCP靶场–Sybaris 考点(redis MODULE LOAD命令执行) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.93 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-11 04:24 EDT Nmap scan report for 192.168.158.93…

差分数组加前缀和

暴力 #include <bits/stdc.h> using namespace std; char arr[(int)1e5*25]; //要强制转换为int int main() {//cout << (char)(a7);long long len0,op0;cin >> len >> op;cin >> arr; //cout << op;//cout << arr;int inx[(int)…