1.介绍

用于监听应用程序事件的接口。

子接口:GenericApplicationListener,SmartApplicationListener。

通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。

ApplicationContext事件机制是观察者设计模式的实现。

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
/**
* 处理应用程序事件
*/
void onApplicationEvent(E event);
}

Spring内置事件:

ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。

@SuppressWarnings("serial")
public class ContextRefreshedEvent extends ApplicationContextEvent {
/**
* 创建一个新的ContextRefreshedEvent事件。
* 此时source已初始化或刷新
*/
public ContextRefreshedEvent(ApplicationContext source) {
super(source);
}
}

ContextStartedEvent:ApplicationContext启动时发布的广播事件。

ContextStoppedEvent:ApplicationContext停止时发布的广播事件。

ContextClosedEvent:ApplicationContext关闭时发布的广播事件。

SpringBoot内置事件:

ApplicationStartingEvent:系统运行开始时发布的广播事件,在进行任何处理之前发布广播。

@SuppressWarnings("serial")
public class ApplicationStartingEvent extends SpringApplicationEvent {
/**
* 创建一个新的ApplicationStartingEvent事件
* @param application 当前应用
* @param args 当前参数
*/
public ApplicationStartingEvent(SpringApplication application, String[] args) {
super(application, args);
}
}

ApplicationEnvironmentPreparedEvent:在系统环境准备完成创建上下文之前发布的广播事件。

ApplicationContextInitializedEvent:在完成所有初始化工作之后,加载任何Bean之前发布的广播事件。

ApplicationPreparedEvent:在加载bean definitions之后,容器刷新之前发布的广播事件。

ApplicationStartedEvent:在容器刷新之后,调用任何应用程序和命令程序之前发布的广播事件。

ApplicationReadyEvent:在调用任何应用程序和命令程序之后发布的广播事件。

ApplicationFailedEvent:在启动发生异常时发布的广播事件。

2.使用

自定义事件

@SuppressWarnings("serial")
public class CustomApplicationStartedEvent extends ApplicationContextEvent {
// 自定义参数
private final String msg; public CustomApplicationStartedEvent(ApplicationContext source,String msg) {
super(source);
this.msg = msg;
}
//getter方法
public String getMsg() {
return msg;
}
}

自定义监听

@Component
public class CustomApplicationListener implements ApplicationListener<CustomApplicationStartedEvent> {
@Override
public void onApplicationEvent(CustomApplicationStartedEvent event) {
System.out.println(event.getMsg());
ApplicationContext applicationContext = event.getApplicationContext();
// 打印容器里面有多少个bean
System.out.println("bean count=====" + applicationContext.getBeanDefinitionCount());
// 打印所有beanName
System.out.println(applicationContext.getBeanDefinitionCount() + "个Bean的名字如下:");
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String beanName : beanDefinitionNames) {
System.out.println("--------"+beanName);
}
}
}

发布广播事件

@SpringBootApplication
public class SsoApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SsoApplication .class);
ConfigurableApplicationContext run = application.run(args);
run.publishEvent(new CustomApplicationStartedEvent(run,"自定义监听事件"));
}
}

Spring扩展之二:ApplicationListener的更多相关文章

  1. spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情

    <spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...

  2. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入

    <spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...

  3. Spring IOC(二)容器初始化

    本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...

  4. spring AOP 之二:@AspectJ注解的3种配置

    @AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...

  5. Spring ApplicationContext(二)环境准备

    Spring ApplicationContext(二)环境准备 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 本节介绍 ...

  6. Spring入门(二)— IOC注解、Spring测试、AOP入门

    一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springf ...

  7. Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面

    Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面 在<Spring Boot(一):快速开始>中介绍了如何使用 Spring Boot 构建一个工程,并且提 ...

  8. Spring Security 解析(二) —— 认证过程

    Spring Security 解析(二) -- 认证过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...

  9. spring扩展点整理

    本文转载自spring扩展点整理 背景 Spring的强大和灵活性不用再强调了.而灵活性就是通过一系列的扩展点来实现的,这些扩展点给应用程序提供了参与Spring容器创建的过程,好多定制化的东西都需要 ...

随机推荐

  1. spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)

    一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...

  2. Linux 发行版本简介

    1991年的10月5日Linus Benedict Torvalds在comp.os.minix 新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like ker ...

  3. 使用C++标准库cout输出枚举类型

    由于枚举类型呢,是属于一种标签类型,所以在使用std::cout输出的时候,会导致无法匹配数据类型而导致cout函数失败. 这里给的建议呢就是在想要输出的时候,将枚举类型转换为数据类型就可以啦. 如: ...

  4. Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs

    这篇论文试图将GAT应用于KG任务中,但是问题是知识图谱中实体与实体之间关系并不相同,因此结构信息不再是简单的节点与节点之间的相邻关系.这里进行了一些小的trick进行改进,即在将实体特征拼接在一起的 ...

  5. return i++ 是先用再加么

    return i++ 比较特殊,先是return i:然后i++. return i=i+ 1 则不同,它是先让i=i+1,再return

  6. CTF-pwn:老板,来几道简单pwn

    wdb_2018_3rd_soEasy 保护全关 在栈上写入shellcode,然后ret2shellcode from pwn import * local = 0pa binary = " ...

  7. day76:luffy:项目前端环境搭建&轮播图的实现

    目录 1.项目前端环境搭建 1.创建项目目录 2.前端初始化全局变量和全局方法 3.跨域CORS 4.axios配置 2.轮播图功能的实现 1.安装依赖模块 2.上传文件相关配置 3.注册home子应 ...

  8. C语言知识点复习梳理

    C语言知识点复习梳理 C语言的知识点讲完了,接下来就是做一下整理与总结,然后就会进入其他知识的学习. 本文目录如下: 基础知识. 顺序程序设计. 数据类型. 标准输入输出. 进制转换. 选择结构. 循 ...

  9. Scrapy加Redis加IP代理池实现音乐爬虫

    音乐爬虫 关注公众号"轻松学编程"了解更多. 目的:爬取歌名,歌手,歌词,歌曲url. 一.创建爬虫项目 创建一个文件夹,进入文件夹,打开cmd窗口,输入: scrapy star ...

  10. MIT黑科技:通过手机记录的咳嗽数据检测是否感染新冠病毒

    这次的新冠状病毒虽然没有2002年的SARS破坏力那么强悍,但其可怕之处是长时间的无症状潜伏,使得被感染者在不知情的情况下,将病毒散播出去.如果没有强有力的防疫手段,病毒的传播几乎难以控制.而防止病毒 ...