「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
小时候最开心的事莫过于躺在沙发上看《西游记》了。大闹天宫、三打白骨精、真假美猴王......一幕幕精彩的故事萦绕脑海,现在想来,回味无穷。
不知道你有没有注意到这个细节:每当孙悟空到了一个新的环境需要了解本地的“风土人情”时,都会挥舞一下金箍棒,将土地召唤出来。那么你可知道,土地公公接收孙悟空召唤的原理是什么吗?
事件通知机制
我们可以先将其理解为“事件通知机制”,即每当孙悟空将金箍棒敲在地上时,就相当于给土地发了一封 email 的通知,告诉他俺老孙来了,赶快出来接驾。当土地收到通知之后就会立即现身了。
大家都知道 Spring 已经为我们提供好了事件监听、订阅的实现,接下来我们用代码来实现一下这个场景。
首先我们要定义一个事件,来记录下孙悟空敲地的动作。
@Getter
public class MonkeyKingEvent extends ApplicationEvent {
private MonkeyKing monkeyKing;
public MonkeyKingEvent(MonkeyKing monkeyKing) {
super("monkeyKing");
this.monkeyKing = monkeyKing;
}
}
其中 MonkeyKing
是我们定义好的孙悟空的实体类
@Data
public class MonkeyKing {
/**
* 是否敲地,默认为否
**/
private boolean knockGround = false;
}
然后我们需要实现 ApplicationListener
来监听孙悟空敲地的动作。
@Component
public class MyGuardianListener implements ApplicationListener<MonkeyKingEvent> {
@Override
public void onApplicationEvent(MonkeyKingEvent event) {
boolean knockGround = event.getMonkeyKing().isKnockGround();
if(knockGround){
MyGuardian.appear();
}else{
MyGuardian.seclusion();
}
}
}
最后我们来验证下整个流程。
@PostMapping
public void testEvent(@RequestParam boolean knockGround) {
MonkeyKing monkeyKing = new MonkeyKing();
monkeyKing.setKnockGround(knockGround);
MonkeyKingEvent monkeyKingEvent = new MonkeyKingEvent(monkeyKing);
//发布孙悟空敲地的动作事件
applicationEventPublisher.publishEvent(monkeyKingEvent);
}
当我们调用testEvent()
方法传入knockGround
为 true
时,打印
土地公公出现了
传入为false
时,打印
土地公公遁地了
这样我们就简单实现了“孙悟空召唤土地”的功能。你以为这样就结束了?从小老师就教导我们要“知其然,更要知其所以然”。
大家都说读源码更像是在喝咖啡,读不懂又苦又涩,读懂了浓郁醇香。为了不影响大家的好心情,这里我们就不研究它的源码了,下一篇文章我们直捣黄龙。
以上就是今天的全部内容了,如果你有不同的意见或者更好的idea
,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!