天天看点

Spring事件监听器使用Spring事件监听器使用基于 spring.factories 文件配置的方式 基于启动时 addListener 配置的方式 基于注解配置的方式

Spring事件监听器使用

Spring 提供了 ApplicationListener 事件监听机制,是应用内部的事件驱动机制。也就是 Pub/Sub 发布订阅机制在应用内部的实现。一般主要是用于监控应用内部的一些运行状况,在应用开发中也可以使用。

基于 spring.factories 文件配置的方式

创建事件类

@Getter
public class EmailMessageEvent extends ApplicationEvent {

    private String content;
    private String to;

    public EmailMessageEvent(Object source, String content, String to) {
        super(source);
        this.content = content;
        this.to = to;
    }


}
           

事件监听器

@Slf4j
public class EmailApplicationListener implements ApplicationListener<EmailMessageEvent> {

    @Override
    public void onApplicationEvent(EmailMessageEvent event) {
        log.info("模拟发送邮件... ");
        log.info("EmailApplicationListener 接受到的消息:{}", event.getContent());
    }
}
           

然后还是在项目的spring.factories中配置监听器

org.springframework.context.ApplicationListener=\
com.xh.factories.listener.EmailApplicationListener
           

发起事件

@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    @GetMapping("/publisher1")
    public void publisher1(String content, String to) {
        EmailMessageEvent event = new EmailMessageEvent(this, content, to);
        applicationEventPublisher.publishEvent(event);
    }

    @GetMapping("/publisher2")
    public void publisher2(String content, String to) {
        ApplicationContext applicationContext = SpringBeanUtils.getApplicationContext();
        EmailMessageEvent event = new EmailMessageEvent(applicationContext, content, to);
        applicationContext.publishEvent(event);
    }

}
           

基于启动时 addListener 配置的方式

@Slf4j
@SpringBootApplication
public class FactoriesApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(FactoriesApplication.class);
        //添加事件监听器
        application.addListeners(new EmailApplicationListener());
        application.run(args);
    }


}
           

基于注解配置的方式

基于注解,将监听配置到 Spring 的 IOC 容器中。

@Slf4j
@Configuration
public class EmailApplicationListener implements ApplicationListener<EmailMessageEvent> {

    @Override
    public void onApplicationEvent(EmailMessageEvent event) {
        log.info("模拟发送邮件... ");
        log.info("EmailApplicationListener 接受到的消息:{}", event.getContent());
    }
}
           

参考文章:SpringBoot核心机制三、ApplicationListener