java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础
回调你可以这样来理解:
A发送消息给B,B处理好A要求的事情后,将结果返回给A,A再对B返回的结果来做进一步的处理。
A、回调的实现
/**
* 回调接口
* @author KOOK
*
*/
public interface CallBack {
/**
* 执行回调方法
* @param objects将处理后的结果作为参数返回给回调方法
*/
public void execute(Object... objects );
}
B、消息的发送者
/**
* 简单本地发送异步消息的类
* @author KOOK
*
*/
public class Local implements CallBack,Runnable{
/**
* 远程接收消息的类,模拟point-to-point
*/
private Remote remote;
/**
* 发送出去的消息
*/
private String message;
public Local(Remote remote, String message) {
super();
this.remote = remote;
this.message = message;
}
/**
* 发送消息
*/
public void sendMessage()
{
/**当前线程的名称**/
System.out.println(Thread.currentThread().getName());
/**创建一个新的线程发送消息**/
Thread thread = new Thread(this);
thread.start();
/**当前线程继续执行**/
System.out.println("Message has been sent by Local~!");
}
/**
* 发送消息后的回调函数
*/
public void execute(Object... objects ) {
/**打印返回的消息**/
System.out.println(objects[0]);
/**打印发送消息的线程名称**/
System.out.println(Thread.currentThread().getName());
/**中断发送消息的线程**/
Thread.interrupted();
}
public static void main(String[] args)
{
Local local = new Local(new Remote(),"Hello");
local.sendMessage();
}
public void run() {
remote.executeMessage(message, this);
}
}
C、远程消息的接收者
/**
* 这个类相当于你的同学
*/
public class Remote {
/**
* 处理消息
* @param msg 接收的消息
* @param callBack 回调函数处理类
*/
public void executeMessage(String msg,CallBack callBack)
{
/**模拟远程类正在处理其他事情,可能需要花费许多时间**/
for(int i=0;i<1000000000;i++)
{
}
/**处理完其他事情,现在来处理消息**/
System.out.println(msg);
System.out.println("I hava executed the message by Local");
/**执行回调**/
callBack.execute(new String[]{"Nice to meet you~!"}); //这相当于同学执行完之后打电话给你
}
}
回调的好处之一:摒弃了继承抽象类方式的回调方式更加简便灵活
public abstract class B{
public void execute(){
getConnection();
doCRUD();
releaseConnection();
}
public abstract void doCRUD();
public void getConnection(){
System.out.println("获得连接...");
}
public void releaseConnection(){
System.out.println("释放连接...");
}
}
public class A extends B{
public void doCRUD(){
System.out.println("执行add操作...");
}
public void add(){
doCRUD();
}
}
public class C extends B{
public void doCRUD(){
System.out.println("执行delete操作...");
}
public void delete(){
doCRUD();
}
}
如果改为回调实现是这样的
interface CallBack{
public void doCRUD();
}
public class HibernateTemplate {
public void execute(CallBack action){
getConnection();
action.doCRUD();
releaseConnection();
}
public void add(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行add操作...");
}
});
}
public void delete(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行delete操作...");
}
});
}
public void getConnection(){
System.out.println("获得连接...");
}
public void releaseConnection(){
System.out.println("释放连接...");
}
}
java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐
- java常用的缓存_java 常用缓存 - 只对肉有感觉的个人空间 - OSCHINA - 中文开源技术交流社区...
缓存是日常开发的粗茶淡饭,如果应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能 JVM 缓存 使用全局变量,如 Map.List等容器用于存放数据,可以认为是堆缓存 eh ...
- java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...
在Java中可以创建几种不同类型的嵌套类: 静态嵌套类: 静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量 public class O ...
- java中类型转换的造型_Java-类型转换 - 吉胖子很瘦的个人空间 - OSCHINA - 中文开源技术交流社区...
类型转换 在实际开发过程中,存在类型转换,类型转换分为两种,自动类型转换和强制类型转换. 自动类型转换 程序编译或运行过程中,jvm可以发生自动类型转换.转换规则: [1]容量小的数据类型可以自动转换 ...
- java下拉框及响应函数_MVC 实现下拉框 - osc_88wjsceo的个人空间 - OSCHINA - 中文开源技术交流社区...
MVC动态实现下拉框的方式有很多种,但是方便快捷的却是很少,现在记录一种常用的下拉框实现方式: 1.先看看视图代码是怎么写的 这是一个下拉框: @Html.DropDownList("sel ...
- java完成九宫格数独_数独(简易九宫格) - 小黑202的个人空间 - OSCHINA - 中文开源技术交流社区...
一.ViewController.h中代码 // // ViewController.h // ThirdSignleView // // Created by on 15/6/10. // ...
- java回调函数的生命_Java的回调函数 - choaklin 的个人空间 - OSCHINA - 中文开源技术交流社区...
暂且不提回调函数的各种定义,如我本人,虽然知道JavaScript的回调的使用,但是百科了回调的定义,还是觉得云里来雾里去.所以大可先从已熟悉的入手,旁推侧引它的原理,再引出Java版的实现. 因为博 ...
- java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...
Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
- java 原子量_Java原子量 - Rickxue的个人空间 - OSCHINA - 中文开源技术交流社区
所谓的原子量即操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题.在Java5之前,可以通过vola ...
最新文章
- java 冒泡排序和快速排序 实现
- node java php_服务端I/O性能:Node、PHP、Java、Go的对比
- js全局变量和局部变量
- ms SQL Server表自增字段重置
- win7下安装Oracle10g解决方案
- 机器学习(machine learning)之AdaBoost算法
- std::string中的反向迭代器rbegin()和rend()
- Java效率工具之Swagger2
- 操作系统中分页、分段、交换空间、页面置换算法等相关概念
- IDEA中Maven项目中界面右边的Maven Projects窗口找不到不出来
- (@WhiteTaken)设计模式学习——代理模式
- Web/前端性能优化
- 西刺代理python_手把手教你使用Python爬取西刺代理数据(下篇)
- Vue select默认选中第一个
- 4G和4G LTE之间的区别是什么?
- “四通一达”本一家,这家人是如何“承包”中国快递半壁江山的?
- angular2 mysql_零起步学习angular2_angularjs教程_汇智网
- [C++]H106OJ-第二周练习总结
- 冰天雪地摄影技巧创意色彩指南
- springboot+jsp项目校园外卖配送系统
热门文章
- c mysql日期时间格式_mysql日期和时间类型
- python做算法题优势_Python语言在科学算法中的优势
- 多少秒算长镜头_下中国象棋,能算多少步才算高手?
- Matlab各种拟合
- Matlab求欧式距离
- java虚拟机常用命令工具
- html的扇形代码导航,CSS3--利用transform和transition属性制作扇形导航
- 【算法图解|2】JavaScript 如何实现数组扁平化
- python怎么改目录_如何查看文件,而不是使用Python进行更改的目录?
- React 学习笔记 —— Ref Hook