Spring扩展功能之ApplicationListener

2020-06-05  本文已影响0人  会上树的程序猿

本节我们来学习Spring的 最后一个拓展功能,也是Spring中很重要的组成部分,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();
}

这里通过AnnotationConfigApplicationContext#publishEvent()进行我们自己事件的发布,可以测试下,看会不会监听到我们自己发布的事件

image.png

到这里我们事件的监听和发布简单的使用已完结,后续我们通过源码的方式深入的学习

上一篇下一篇

猜你喜欢

热点阅读