美文网首页
Spring扩展功能之ApplicationListener

Spring扩展功能之ApplicationListener

作者: 会上树的程序猿 | 来源:发表于2020-06-05 14:40 被阅读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();
    }
    

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

    image.png

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

    相关文章

      网友评论

          本文标题:Spring扩展功能之ApplicationListener

          本文链接:https://www.haomeiwen.com/subject/mszozhtx.html