springboot 发布订阅,可以实现基于事件驱动对业务进行解耦
这里模拟下订单发消息业务,实现如下
1、定义 Order 实体类
package com.tdemo.learn.bean;
import lombok.Data;
@Data
public class Order {
private String orderNo;
private String content;
}
2、定义 OrderService
发布事件使用 ApplicationContext 的 publishEvent 方法
package com.tdemo.learn.service;
import com.tdemo.learn.bean.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class OrderService {
@Autowired
private ApplicationContext ac;
public void addOrder() {
Order order = new Order();
order.setOrderNo("20201009");
order.setContent("买本书");
System.out.println("下订单: " + order);
ac.publishEvent(order);
}
}
3、定义 MsgService
监听事件使用 @EventListener 注解
package com.tdemo.learn.service;
import com.tdemo.learn.bean.Order;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
@Service
public class MsgService {
@EventListener
public void sendMsg(Order order) {
System.out.println("发送消息:" + order);
}
}
4、测试
package com.tdemo;
import com.tdemo.learn.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TdemoApplicationTests {
@Autowired
OrderService orderService;
@Test
void contextLoads() {
orderService.addOrder();
}
}
5、运行效果如下
至此完