-
Spring中的观察者模式_监听模式
需求:
执行完某些任务后多渠道发送通知消息
伪代码
消息体
package com.wanqi.pojo;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
public class MyMessage {
private String title;
private String msg;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "MyMessage{" +
"title='" + title + '\'' +
", msg='" + msg + '\'' +
'}';
}
public MyMessage(String title, String msg) {
this.title = title;
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
事件对象
package com.wanqi.event;
import org.springframework.context.ApplicationEvent;
import org.springframework.stereotype.Component;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
public class OrderEvent extends ApplicationEvent {
public OrderEvent(Object source) {
super(source);
}
}
事件消费者(发送渠道)
package com.wanqi.event;
import com.wanqi.pojo.MyMessage;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
@Component
public class EmailMessage implements ApplicationListener<OrderEvent> {
@Override
public void onApplicationEvent(OrderEvent event) {
final Object source = event.getSource();
if (source instanceof MyMessage) {
System.out.println("邮件: " + ((MyMessage) source).getTitle() + "---" + ((MyMessage) source).getMsg());
}
}
}
事件消费者(发送渠道)
package com.wanqi.event;
import com.wanqi.pojo.MyMessage;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
@Component
public class WXMessage implements ApplicationListener<OrderEvent> {
@Override
public void onApplicationEvent(OrderEvent event) {
final Object source = event.getSource();
if(source instanceof MyMessage){
System.out.println("微信: " + ((MyMessage) source).getTitle() + "---" +((MyMessage) source).getMsg());
}
}
}
事件生产者
package com.wanqi.service;
import com.wanqi.event.OrderEvent;
import com.wanqi.pojo.MyMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
@Service
public class MyTest {
ApplicationContext applicationContext;
@Autowired
public MyTest(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public void msg(){
System.out.println("任务执行完成。。。。。");
OrderEvent orderEvent = new OrderEvent(new MyMessage("发送消息啦", "xxxxxxxxxxxx"));
//传播通道
applicationContext.publishEvent(orderEvent);
}
}
测试
package com.wanqi;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DesignPatternApplicationTests {
@Autowired
com.wanqi.service.MyTest test;
@Test
void contextLoads() {
test.msg();
}
}
出处:https://www.cnblogs.com/wandaren/p/16835157.html
栏目列表
最新更新
80386学习(二) 80386特权级保护
80386学习(一) 80386CPU介绍
8086汇编语言学习(十) 8086中断
8086汇编语言学习(九) 8086标志寄存器
8086汇编语言学习(九) 8086标志寄存器
8086汇编语言学习(八) 8086子程序
8086汇编语言学习(六) 8086处理结构化数据
8086汇编语言学习(五) 8086寻址方式
8086汇编语言学习(四) 8086汇编程序的编译
8086汇编语言学习(三) 8086中的段和栈
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
在vscode中使用R时,用快捷键来快捷键入卡
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型