Spring ApplicationListener的使用

4,517 阅读1分钟

介绍

Spring ApplicationListener 是Spring事件机制的一部分,与ApplicationEvent抽象类结合完成ApplicationContext的事件通知机制.

ContextRefreshedEvent事件监听

以Spring的内置事件ContextRefreshedEvent为例,当ApplicationContext被初始化或刷新时,会触发ContextRefreshedEvent事件.如下代码示例:

@Component
public class LearnListener implements ApplicationListener<ContextRefreshedEvent> {
   @Override
   public void onApplicationEvent(ContextRefreshedEvent event) {
      //获取所有的bean
      String[] definitionNames = event.getApplicationContext().getBeanDefinitionNames();
      for (String name : definitionNames) {
         //打印名称
         System.out.println("name = " + name);
      }
   }
}

自定义事件

代码

//继承ApplicationEvent 抽象类就可以自定义事件模型
public class MyEvent extends ApplicationEvent {
 
    private Long id;
    private String message;
    public MyEvent(Object source) {
        super(source);
    }

    public MyEvent(Object source, Long id, String message) {
        super(source);
        this.id = id;
        this.message = message;
    }
    //get set 方法省略
}
//实现ApplicationListener接口
    @Component
public class MyListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent event) {
        System.out.println("监听到事件: "+event.getId()+"\t"+event.getMessage());
    }
}

测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class ListenerTest {
    @Autowired
    private ApplicationContext applicationContext;

    @Test
    public void testListenner() {
        MyEvent myEvent = new MyEvent("myEvent", 9527L, "十二点了 该吃饭了~");
        applicationContext.publishEvent(myEvent);
      //  System.out.println("发送结束");
    }
}

结果

参考: segmentfault.com/a/119000001…