本篇要点
介绍观察者模式和发布订阅模式的区别。什么是观察者模式?
}
}
@Slf4j
@Service
public class SimpleCouponService {
ExecutorService executorService = wSingleThreadExecutor();
// 线程池执⾏任务,减少资源消耗
public void addCoupon(String username) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("给⽤户 [{}] 发放优惠券", username);
});
}
}
这⾥⽤户注册事件对【和优惠券】其实是⼀对多的关系,可以使⽤观察者模式进⾏解耦:/**
* 主题接⼝
* @author Summerday
*/
public interface Subject {
421事件是什么void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
/**
* 观察者接⼝
* @author Summerday
*/
public interface Observer {
void update(String message);
}
@Component
@Slf4j
public class EmailObserver implements Observer {
@Override
public void update(String message) {
log.info("向[{}]发送邮件", message);
}
}
@Component
@Slf4j
public class CouponObserver implements Observer {
@Override
public void update(String message) {
log.info("向[{}]发送优惠券",message);
}
}
@Component
public class UserRegisterSubject implements Subject {
@Autowired
List<Observer> observers;
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
}
@Override
public void notifyObservers(String username) {
for (Observer observer : observers) {
observer.update(username);
}
}
}
@RestController
@RequestMapping("/")
public class UserController {
@Autowired
UserRegisterSubject subject;
@Autowired
private SimpleUserService userService;
发布订阅模式是什么?
尽管两者存在差异,但是他们其实在概念上相似,⽹上说法很多,不需要过于纠结,重点在于我们需要他们为什么出现,解决了什么问题。Spring事件监听机制概述
SpringBoot中事件监听机制则通过发布-订阅实现,主要包括以下三部分:
事件 ApplicationEvent,继承JDK的EventObject,可⾃定义事件。
事件发布者 ApplicationEventPublisher,负责事件发布。
事件监听者 ApplicationListener,继承JDK的EventListener,负责监听指定的事件。
SpringBoot事件监听
定义注册事件
注解⽅式 @EventListener定义
实现ApplicationListener的⽅式定义
/**
注册事件发布者定义接⼝
主程序类
测试接⼝
源码下载
参考阅读
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论