Spring 监听器listener原理-基本使用(一)
程序员文章站
2022-05-01 19:17:49
...
- Spring 监听器listener原理-基本使用(一)
- Spring 监听器listener原理-手写监听器(二)
- Spring 监听器listener原理-spring监听器源码分析(三)
介绍
Spring的监听器也可以说是一种观察者模式,它能实现事件与事件监听者直接的解耦,在Spring中监听器的实现主要有一下重要组件:
- ApplicationListener:事件监听者,观察者;
- ApplicationEvent:Spring 事件,记录事件源、事件内容、时间等数据;
- @EventListener:除了实现ApplicationListener接口注册监听器,也可以使用注解的方式
- ApplicationEventPublisher:发布事件;
#自定义事件以及事件监听器
新增新事件只需要实现Spring提供的ApplicationEvent 的接口
package com.zhu.demo.event;
import org.springframework.context.ApplicationEvent;
public class InitializePost extends ApplicationEvent {
private String status ="Y";
public InitializePost(Object source) {
super(source);
}
public InitializePost(Object source, String status) {
super(source);
this.status = status;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
同理新增监听器只需要实现ApplicationListener接口
@Component
public class MyListener1 implements ApplicationListener<InitializePost> {
@Override
public void onApplicationEvent(InitializePost event) {
System.out.println("--------------: " + event.getStatus());
}
}
运行Spring发布事件
public class DemoApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
applicationContext.publishEvent(new InitializePost(applicationContext, "Y"));
}
}
--------------: Y
#监听Spring发布的事件
Spring容器启动的时候在不同阶段会发布不同事件,我们可以根据自己的需求进行监听。(阿里的nacos服务自动注册原理就是监听到web容器初始化完成事件,完成自动注册发现)。
Spring容器启动完之后,会发布一个ContextRefreshedEvent事件,我们可以实现自己的监听器进行监听。
@Component
public class MyListener2 implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("-----------------:"+event.getSource().getClass());
}
}
运行结果
-----------------:class org.springframework.context.annotation.AnnotationConfigApplicationContext
使用@EventListener注册监听器
@ComponentScan({"com.zhu"})
@Configuration
public class AppConfig {
@EventListener
public void test(InitializePost initializePost){
System.out.println("--------------: "+initializePost.getStatus());
}
}
运行结果
--------------: Y
Spring监听器的基本使用到这里的结束了,后面会仿照Spring,手写一个监听器框架,带大家理解Spring的监听器的原理
上一篇: java命令执行class文件的原理
下一篇: java class打jar包
推荐阅读
-
Spring Cache的基本使用与实现原理详解
-
从原理层面掌握@SessionAttribute的使用【一起学Spring MVC】
-
从原理层面掌握@RequestAttribute、@SessionAttribute的使用【一起学Spring MVC】
-
spring基本使用(13)-springAOP的使用以及原理3 springAOP的自动代理创建器AbstractAutoProxyCreator
-
SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置
-
Spring jackson原理及基本使用方法详解
-
一、Spring基本使用
-
从原理层面掌握@RequestAttribute、@SessionAttribute的使用【一起学Spring MVC】
-
Spring面向切面编程(AOP)原理一之使用JDK实现动态代理
-
从原理层面掌握@SessionAttribute的使用【一起学Spring MVC】