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