Spring扩展功能之ApplicationListener
2020-06-05 本文已影响0人
会上树的程序猿
本节我们来学习Spring的 最后一个拓展功能,也是Spring中很重要的组成部分,ApplicationListener其主要负责监听容器中发布的事件【事件驱动模型】,其事件为ApplicationEvent以及其子事件等,接下来我们首先来编写自己的【事件监听】
步骤
- 编写一个监听器(ApplicationListener的实现类)来监听某个事件(ApplicationEvent及其子类)
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
System.out.println("收到容器中的事件:"+applicationEvent);
}
上述只是其中的一种实现方式,我们还可以通过注解的方式来实现
@Service
public class UserService {
//通过注解来实现普桶的业务方法实现监听ApplicationEvent类型的事件
@EventListener(classes = {ApplicationEvent.class})
public void listen(ApplicationEvent event){
System.out.println("UserService ...监听到的事件:"+event);
}
当然注解@EventListener是核心,其中还是监听的ApplicationEvent类型的事件
- 配置类(其主要的作用:将我们的这些组件加入到容器中)
@Configuration
@ComponentScan(value = "com.cacmp.bean.expand")
public class ExpandConfig {
}
- 测试类
@Test
public void testExpand(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExpandConfig.class);
applicationContext.close();
}
image.png我们来测试下看具体都收到了哪些事件,结果如下图所示:
从测试图中看到的是监听待的事件为容器刷新和容器关闭事件
- 同样我们也可以发布自己的事件,代码如下:
//Spring拓展BeanFactoryPostProcessor的测试
@Test
public void testExpand(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExpandConfig.class);
//发布一个事件
String event = "我自己的事件";
ApplicationEvent applicationEvent = new ApplicationEvent(event){
};
applicationContext.publishEvent(applicationEvent);
applicationContext.close();
}
image.png这里通过AnnotationConfigApplicationContext#publishEvent()进行我们自己事件的发布,可以测试下,看会不会监听到我们自己发布的事件
到这里我们事件的监听和发布简单的使用已完结,后续我们通过源码的方式深入的学习