Spring boot的监听这么简单?
Posted NewWorldForU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot的监听这么简单?相关的知识,希望对你有一定的参考价值。
需求
当接收msg = 6667时,除了原有逻辑外,还需记录日志,且处理其他复杂业务事件。
技术选型
监听器,优势其一,该业务是一个复杂业务逻辑,耗时,若同步执行则会导致用户体验极差。其二:服务解耦。
其实监听器最主要的就是为了服务解耦,类似一些日志、发邮件、发短信等等业务操作都可以运用监听器处理。
Spring中AlpplicationContext 对象(上下文对象)中提供了publishEvent()方法,实现了观察者设计模式,可以通过ApplicationEvent传播给系统中所有的监听者。
ApplicationEvent:被监听的事件对象。
Listener:观察者,可实现多个。
实现
核心事件类 ApplicationEvent
public class MyApplicationEvent extends ApplicationEvent {
public String msg;
public MyApplicationEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
}
Spring 中有俩种实现监听器的方式,ApplicationListener 和 @EventListener
@EventListener中condition为EL表达式,
@Slf4j
@Component
public class MyApplicationLister1 {
// 同步的
@EventListener(condition = "#event.msg.equals('6667')")
public void testA(MyApplicationEvent event) {
log.info(">>>>>>>>>>>>>>>>测试EventListener.testA:{}", event);
log.info("处理复杂业务中....");
}
}
控制层:ApplicationContext 中的publishEvent()会触发监听机制。
@RestController
@RequestMapping("/test")
public class testController {
@Autowired
ApplicationContext applicationContext;
@GetMapping("/lister")
public void getObjectProperties(@RequestParam String msg) {
applicationContext.publishEvent(new MyApplicationEvent("测试", msg));
}
}
打印台
ApplicationListener 相对于@EventListener来说粒度更粗。
@Slf4j
@Component
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent event) {
log.info(">>>>>>>>>>>>>>>>测试ApplicationListener:{}", event);
}
}
———— What is worth doing is worth doing well.
以上是关于Spring boot的监听这么简单?的主要内容,如果未能解决你的问题,请参考以下文章