java 回调模式 (部分转载,部分原创)

“if you call me, i will call back”,说白了,就是有相互依赖关系的两个类之间的互相调用

package callBack;

publicclassContextimplementsA.Callback{

privateAa;

publicvoidbegin(){
System.out.println("begin...");
}

publicvoidend(){
System.out.println("end...");
}

publicContext(){
this.a=newA(this);
}

publicvoiddoSomething(){
this.a.doIt();
}

publicstaticvoidmain(Stringargs[]){
newContext().doSomething();
}
}

package callBack

publicclassA{

privatefinalCallbackcallback;

publicstaticinterfaceCallback{
publicvoidbegin();
publicvoidend();
}
publicA(Callbackcallback){
this.callback=callback;
}
publicvoiddoIt(){
callback.begin();
System.out.println("dosomething...");
callback.end();
}
}

上面的代码模型其原型是出自hibernate里的org.hibernate.jdbc.JDBCContext 和 org.hibernate.jdbc.ConnectionManager两个类,从上面的模型不难看出:Context类实现了A类的Callback接口,在Context类的构造器里将自己注入了A类,在Context类里调用A类的doIt()方法,这时就是:you call me;在doIt()方法体里调用了Context类的begin()和end()方法,这时就是:i call back。Context类 和 A类相互依赖,互相调用
在hibernate的源代码里大量使用了上面的callback回调模型,又如:org.hibernate.jdbc.JDBCContext 和 org.hibernate.impl.SessionImpl等等,可以自己去看源代码,这里不再赘述。

当然上面提到的模型中的两个类也可以写在同一个类里面,定义的Callback接口可以用内部匿名类来实现,比如下面的一个简单的dao实现:

package callBack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;

public class Dao {
private interface Callback {
Object doIt(Connection conn) throws SQLException;
}
private Object execute(Callback callback) throws SQLException {
Connection conn = openConnection(); // 开启数据库连接
try { return callback.doIt(conn); } // 执行具体操作并返回操作结果
finally { closeConnection(conn); } // 关闭数据库连接
}

public Object sqlQuery(final String sql) throws SQLException {
return execute(
new Callback() {
public Object doIt(Connection conn) throws SQLException {
ResultSet rs=conn.createStatement().executeQuery(sql);
while(rs.next()){
System.out.print(rs.getInt("id")+"\t");
System.out.print(rs.getString("userName")+"\t");
System.out.print(rs.getString("email")+"\t");
System.out.print(rs.getString("passWord")+"\t");
System.out.print(rs.getString("address")+"\t");
System.out.print(rs.getString("sex")+"\t");
System.out.print(rs.getString("work")+"\t");
System.out.println();
}
return rs;
}
}
);
}

public Connection openConnection() throws SQLException {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/blog", "root", "root");
}
public void closeConnection(Connection conn) throws SQLException {
if(conn != null && !conn.isClosed()) {
conn.close();
}
}

public static void main(String[] args){
Dao dao=new Dao();
try{
String sql="select * from user";
Class.forName("com.mysql.jdbc.Driver");
dao.sqlQuery(sql);

}catch(Exception e){
e.printStackTrace();
}
}
}
用这种回调模式方便的把openConnection()和closeConnection()做了切片,从代码中剥离出来,使代码复用性更高,也更简洁



手把手教你用SpringBoot+Vue3+Docker从零搭建一个在线OJ系统(附完整源码) 本文详细介绍了如何使用SpringBoot、Vue3和Docker从零搭建一个在线OJ系统,涵盖前后端开发、判题机实现及Docker容器化部署。通过完整的源码和实战步骤,帮助开发者掌握OJ系统的核心架构与关键技术,适用于算法训练、编程竞赛等场景。 阅读详情

相关推荐

C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度

这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。

一个专注于技术研究创新的程序员 2467

【java回调】java两个类之间的回调函数传递

背景交代:熟悉用js开发的cordovaAPP;对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝我好运T^T 本文关键词:cordovaAPP插件开发、实战问题 开发中遇到的实际问题: 存在2个只会被系统实例化的类(安卓系统事件消息硬触发的BroadcastReceiver类,c...

akdefm8564的博客 425

Ansys Zemax | 公差分析中的补偿器优化:如何提升系统良率?

本文深入探讨了在Ansys Zemax公差分析中如何有效设置与优化补偿器以提升系统良率。文章指出,补偿器是连接理想设计与现实生产的关键,通过模拟实际装配中的调整(如后焦距),能显著改善公差分析的“悲观”预测。详细介绍了补偿器的添加方法、多补偿器策略、评价函数设计以及通过灵敏度分析和蒙特卡洛档案优化补偿效果,旨在帮助光学工程师制定更符合生产实际的公差策略,从而有效提升产品良率。

weixin_28419039的博客 619

Java 回调的实现方式

Java 回调的几种方式

白T 2293

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

JNI的本质解析:Android Framework视角下的Java-Native衔接机制

本文基于Android 14源码深入分析JNI机制,从Android Framework视角解析Java-Native衔接原理。主要内容包括:JNI的双轨制注册机制(静态与动态注册),核心数据结构(JNIEnv与JavaVM)的实现原理,以及完整的调用链路剖析。文章通过MessageQueue的JNI实现案例,展示Android Framework如何利用JNI实现Java层与Native层的高效交互,并提供了性能优化建议。分析表明,JNI作为Android系统架构的关键桥梁,其设计充分考虑了性能、安全性

保持专注,保持热爱 1209

Java 实现回调

回调函数。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 2068

【数据集4】GSWP3数据集详解

简介GSWP3数据集

WW、forever的博客 1366

java工厂模式三种详解(部分转载)

工厂方法模式(Factory Method) 工厂方法模式分为三种: 1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: [java]view plaincopy publicinterfaceSender{ publicvoidSe...

llussize的博客 9万+

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1723

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

java回调机制及其实现

1. 什么是回调函数 回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: (1)属于工作流的一个部分; (2)必须按照工作流指定的调用约定来申明(定义); (3)他的调用时机由工作流决定,回调函数的实现者不能...

dgit3228的博客 2041

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

java回调参数

Java回调参数:深入理解与应用 在软件开发中,回调函数是一种常见的设计模式,它允许在某个操作完成时自动执行一段代码。在Java中,回调参数的使用非常普遍,尤其是在事件驱动编程和异步编程中。本文将详细介绍Java回调参数的概念、应用场景以及如何实现回调。 回调参数简介 回调参数是一种特殊的参数,它允许在函数执行过程中调用另...

weixin_30522983的博客 156

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java回调机制的简易实现办法

java回调机制的简易实现办法 【转载,出自百度文库 贡献时间:2012-01-29 贡献者: sjailjq 崭露头角 三级 】   1.  什么是回调函数     所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调...

iteye_7849的博客 162

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Java基础】回调函数

目录 一、定义 二、举例【观察者模式】 转载自:https://www.jianshu.com/p/b8a271728638 一、定义 回调的意义在于,通过在其他对象中调用自身类中定义的函数,达到一定的目的(常见于事件注册,监听以及线程Runnable中的run)。 回调函数定义: 传递一个函数A到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名...

ZHAOJING1234567的博客 391

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java中接口实现回调方法带参

我整理的一些关于【java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java中接口实现回调方法带参 在Java编程中,回调是一种强大且有效的设计模式。回调可以被广泛应用于异步处理、事件监听、以及其他需要方法间解耦的场景。本文将探讨如何在Java中利用接口实...

weixin_32677301的博客 237

java如何配置接口回调

Java接口回调配置方案 在Java开发中,接口回调是一种常见的设计模式,它允许一个对象在完成某些操作后通知另一个对象。这种模式在处理异步操作、事件驱动编程等方面非常有用。本文将介绍如何在Java中配置接口回调,并提供一个具体的示例。 问题描述 假设我们有一个电商网站,用户在下单后需要通知第三方支付平台进行支付处理。我们需...

weixin_31363913的博客 240

接口回调与方法回调

接口回调与方法回调

qq_43530326的博客 4677

JAVA 设计模式-回调模式

转载于http://www.2cto.com/kf/201503/385522.html 还可以参考一篇 : http://blog.youkuaiyun.com/cauchyweierstrass/article/details/44593807 感谢 开发Android已有两年了,说来惭愧,回调虽然随处可见,并且网上关于回调函数和接口回调的内容很多,可一直没弄明白,总结不明白的

qq1164014750 1万+

java回调函数

安卓中回调函数的理解

leezhiyuan的专栏 493

java 实现回调

Java 实现回调机制 回调机制是一种常见的编程模式,它允许一个函数在执行完成后,通知调用者执行另一个函数。在Java中,回调可以通过接口、匿名类或Lambda表达式实现。本文将详细介绍Java实现回调的几种方式,并提供示例代码。 回调的概念 回调是一种设计模式,它允许程序在某个事件发生时,自动执行一段代码。这种模式在很多...

weixin_41949949的博客 402

模版模式和回调模式

原创内容,转载请注明出处 1、模版模式 模版模式,顾名思义,是指将一些通用的行为实现都已完成,然后一些可变的行为交由我们来实现完成。在实际生活中有很多这样的例子,比如填写合同协议或者其他文件,文件上已经有通用的信息,我们只需要填写我们的个人信息并且签名即可,该文件就是一个模版。 UML类图表示  创建父类SuperClass package com.test.designermode...

iteye_17810的博客 163

java的回调函数

关键词: Java 回调函数 CallBack Java中的"回调函数"一般是用接口来实现的,如 public class Test{ public static void main...

cichaojiao4477的博客 274
上一篇: java 回调模式 (部分转载,部分原创)
下一篇: java 回调模式 (部分转载,部分原创)
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值