当前位置: 首页 > news >正文

JAVA回调函数简单讲解 CallBack

回调,其实就是有个回应的那种感觉。

那么,接下来,我们就用消息推送的场景,简简单单地讲解下回调函数的使用。

直接看代码,

先创建一个回调接口,

MessageCallBack

/**
 * @Author : JCccc
 * @CreateTime : 2019-2-12
 * @Description :回调函数需要执行的内容
 * @Point: Keep a good mood
 **/

public interface MessageCallBack {
    //成功
    public void onSccuess(String message, String account);
    //失败
    public void onFailure(String message, String account);
    //重连等等
}

接下来,是模拟消息发送的客户端,

MessageClient

/**
 * @Author : JCccc
 * @CreateTime : 2019-2-12
 * @Description :
 * @Point: Keep a good mood
 **/
public class MessageClient implements MessageCallBack {

    private String message;
    private String account;
    //重写回调接口的方法
    @Override
    public void onSccuess(String message, String account) {

        System.out.println("进入回调函数--"+"消息推送成功,"+"客户是:"+account+" 推送的消息是:"+message);
    }

    @Override
    public void onFailure(String message, String account) {

        System.out.println("进入回调函数--"+"消息推送失败,"+"客户是:"+account+" 推送的消息是:"+message);

    }

    public void  sendMessage(){

        System.out.println("开始调用服务端进行消息的推送");
        new MessageServer().send(message,account,this);

     //   new MessageServer().send(message,"Mike",new MessageClient(message,account));

    }

    public MessageClient(String message, String account) {
        this.message = message;
        this.account = account;
    }

}

接下来,是模拟消息服务器:

 MessageServer:

/**
 * @Author : JCccc
 * @CreateTime : 2019-2-12
 * @Description :
 * @Point: Keep a good mood
 **/
public class MessageServer {


    public void send(String message, String account, MessageClient messageClient){

        try {
            System.out.println(message+" "+account+"消息推送完毕");
            messageClient.onSccuess(message,account);
        } catch (Exception e) {
            e.printStackTrace();
            messageClient.onFailure(message,account);
        }



    }
}

最后,写个简单的对外接口,提供消息推送,

MessageController

 

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author : JCccc
 * @CreateTime : 2019-2-12
 * @Description :
 * @Point: Keep a good mood
 **/

@RestController
public class MessageController {


    @GetMapping("/sendMessage/test")
    public void sendMesssage(@RequestParam String account){
        String message="这是一条测试消息";
        MessageClient messageClient=new MessageClient(message,account);
        messageClient.sendMessage();
    }

}

 

现在,代码码完了,我们打开postman来看看整个跑起来是怎么回事,

 

运行结果:

 可以看到控制台得输出是

整个流程下来,应用调用消息客户端,想要推送一条消息;

                         消息客户端拿到客户信息和需要推送的消息后,调用消息服务端推送消息的方法进行推送操作;

                        消息服务端进行完推送操作后,调用客户端的回调函数,告知推送成功或是失败。

  如果要验证下消息推送失败的回调,也简单,把代码

// int a=2/0;

加到消息服务端推送处,模拟推送过程出现异常即可。

 

 

好了,简单的回调函数的应用场景介绍就这样吧, 可以熟悉后自己扩展。

相关文章:

  • JAVA HttpClient 远程调用接口doGet、doPost工具类
  • JAVA 接口签名sign生成 工具类
  • mybatis-config配置文件各项简单介绍
  • Springboot整合Mybatis增删查改、连接MYSQL数据库及配置druid连接池
  • JAVA 模板设计模式
  • Springboot 最简单的结合MYSQL数据实现EXCEL表格导出及数据导入
  • Springboot中使用GSON报错 An attempt was made to call the method com.google.gson.GsonBuilder.setLenient
  • IDEA @AutoWired注入bean 出现红色波浪线
  • JAVA 最常用实用的正则表达式校验
  • Springboot 整合WebFlux 实现RESTFUI风格API 及简单的CRUD
  • Springboot 读取配置文件application.properties (yml)的四种方式
  • Springboot 指定获取自己写的配置properties文件的值
  • JAVA AES加密解密工具类
  • Springboot 快速了解 事务回滚@Transactional
  • Springboot Mybatis使用pageHelper实现分页查询
  • Angularjs之国际化
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java面向对象及其三大特征
  • Java-详解HashMap
  • mac修复ab及siege安装
  • Redash本地开发环境搭建
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 分享几个不错的工具
  • 工程优化暨babel升级小记
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前言-如何学习区块链
  • 因为阿里,他们成了“杭漂”
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​flutter 代码混淆
  • ​业务双活的数据切换思路设计(下)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #NOIP 2014#Day.2 T3 解方程
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (6)添加vue-cookie
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (function(){})()的分步解析
  • (HAL库版)freeRTOS移植STMF103
  • (javascript)再说document.body.scrollTop的使用问题
  • (solr系列:一)使用tomcat部署solr服务
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (万字长文)Spring的核心知识尽揽其中
  • (原)本想说脏话,奈何已放下
  • (转)memcache、redis缓存
  • (转)树状数组
  • ***检测工具之RKHunter AIDE
  • .NET Core 成都线下面基会拉开序幕
  • .Net Memory Profiler的使用举例
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET委托:一个关于C#的睡前故事
  • /var/log/cvslog 太大
  • @Import注解详解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...