public class LikeEvent { // 堆代码 duidaima.com private String statusId; // 朋友圈状态的ID private String liker; // 点赞者的微信号 public LikeEvent(String statusId, String liker) { this.statusId = statusId; this.liker = liker; } public String getStatusId() { return statusId; } public String getLiker() { return liker; } }然后,我们需要定义一个朋友圈状态类,用于表示朋友圈中的一条状态:
@Data public class Status { private String id; // 状态的ID private String userName; // 发布人 private String content; // 状态的内容 private List<String> likes; // 点赞者的微信号列表 public Status(String id,String userName, String content) { this.id = id; this.userName = userName; this.content = content; this.likes = new ArrayList<>(); } }接下来,我们需要定义一个朋友圈服务类,用于发布朋友圈状态和处理点赞事件:
@Service public class MomentsService { public static Map<String, Status> statuses = new HashMap<>(); // 朋友圈状态的ID到状态对象的映射 @Autowired private ApplicationEventPublisher publisher; // 事件发布器 public String postStatus(String userName , String content) { String id = UUID.randomUUID().toString(); // 生成一个随机的ID Status status = new Status(id, userName,content); statuses.put(id, status); return id; } public void likeStatus(String statusId, String liker) { Status status = statuses.get(statusId); if (status != null) { status.addLike(liker); publisher.publishEvent(new LikeEvent(statusId, liker)); // 发布点赞事件 } } }在这个服务类中,我们使用了Spring的事件机制来处理点赞事件。当一个朋友圈状态被点赞时,我们会发布一个点赞事件。然后,我们专门定义一个监听器类,用来处理点赞事件。
@Component public class MomentsListener { @EventListener public void handleLikeEvent(LikeEvent event) { String statusId = event.getStatusId(); String liker = event.getLiker(); Status status = statuses.get(statusId); if (status != null) { System.out.println(liker + " 点赞了 " + status.getUserName() + "的动态:" + status.getContent()); System.out.println("当前点赞列表:" + status.getLikes()); } } }测试:
@Resource MomentsService momentsService; @Test public void testEvent(){ User user1 = User.builder().userName("张无忌").build(); User user2 = User.builder().userName("李莫愁").build(); User user3 = User.builder().userName("周芷若").build(); //发张无忌布一条动态,返回朋友圈状态ID String statusId = momentsService.postStatus(user1.getUserName(), "今天天气真好!"); //李莫愁来点赞 momentsService.likeStatus(statusId,user2.getUserName()); //周芷若也来点赞 momentsService.likeStatus(statusId,user3.getUserName()); }结果:
@EventListener public void handleLikeEvent2(LikeEvent event) { String statusId = event.getStatusId(); Status status = statuses.get(statusId); if (status != null) { System.out.println("当前点赞总数:" + status.getLikes().size()); } }只需要增加这段代码,其他任何地方都不要动,就是这么爽!
测试结果: