Spring扩展之二:ApplicationListener
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的更多相关文章
- spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情
<spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...
- spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入
<spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...
- Spring IOC(二)容器初始化
本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- Spring ApplicationContext(二)环境准备
Spring ApplicationContext(二)环境准备 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 本节介绍 ...
- Spring入门(二)— IOC注解、Spring测试、AOP入门
一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springf ...
- Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面
Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面 在<Spring Boot(一):快速开始>中介绍了如何使用 Spring Boot 构建一个工程,并且提 ...
- Spring Security 解析(二) —— 认证过程
Spring Security 解析(二) -- 认证过程 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...
- spring扩展点整理
本文转载自spring扩展点整理 背景 Spring的强大和灵活性不用再强调了.而灵活性就是通过一系列的扩展点来实现的,这些扩展点给应用程序提供了参与Spring容器创建的过程,好多定制化的东西都需要 ...
随机推荐
- swoft 事件监听和触发 打印sql日志
需求 打印出swoft的所有sql日志到控制台或者文件 只要打开listener 下面 Dbranlisten.php 里面最后一行注释即可,swoft已经帮我们实现好了 ____ _____ ___ ...
- linux(centos8):安装java jdk 15 (java 15)
一,下载jdk15 官方网站: https://www.oracle.com/java/ 下载页面: https://www.oracle.com/cn/java/technologies/javas ...
- js获取页面高度
<script> function getInfo() { var s = ""; s += " 网页可见区域宽:"+ document.body. ...
- http与https随笔
http: 超文本传输协议.使用TCP/IP协议 https: 安全超文本传输协议.使用TLS/SSL协议 不同: 1.安全 http是明文传输.http是具有安全性的SSL加密传输协议. https ...
- Qt导入CMakeLists.txt后无法调试
问题: Qt导入CMakeLists.txt后无法单步调试 解决方法: 在CMakeLists.txt后加入一句: SET(CMAKE_BUILD_TYPE DEBUG)
- c库中sprintf
用法:sprintf指的是字符串格式化命令,主要功能是把某个数据写入某个字符串中: 我的理解就是,将某个其它类型的数据按着某一格式写入char *a,因此叫格式化命令: 语法: #include< ...
- python机器学习识别手写数字
手写数字识别 关注公众号"轻松学编程"了解更多. 导包 import numpy as np import matplotlib.pyplot as plt %matplotlib ...
- python框架Django中MTV之Model(数据模型)
MTV框架之Model(数据模型) 关注公众号"轻松学编程"了解更多. 1.连接MySQL数据库 项目中的settings.py设置范例 # 配置数据库 DATABASES = { ...
- 给萌新HTML5 入门指南(二)
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们已经为大家介绍了HTML5新增的内容和基础页面布局,这篇会继续向大 ...
- CF295C Greg and Friends
首先 我们考虑每次船来回运人时都可以看成一种dp状态 又因为人的体重只有50kg和100kg两种, 所以我们可以开一个三维数组dp[i][j][k],第1维表示在出发岸50kg有i个,第2维表示在出发 ...