“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()做了切片,从代码中剥离出来,使代码复用性更高,也更简洁
分享到:
相关推荐
在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象执行特定操作后接收通知或进行处理。这种机制通常用于事件驱动编程或者异步编程中,使得代码能够响应某些特定事件的发生。在给定的场景中,我们...
回调函数允许一个方法在完成特定操作后通知另一个方法,这种设计模式在异步编程和事件处理中尤其常见。在Java中,我们可以使用接口或者匿名内部类来实现回调机制。 首先,我们需要理解什么是回调。回调是一种编程...
企业微信回调模式建立连接需要的java类和jar包,JAVA方面的代码, 包含7个java类和一个jar包,企业微信回调模式建立连接需要的java类和jar包,JAVA方面的代码, 包含7个java类和一个jar包
本案例将详细讲解如何使用Java来实现企业微信的回调配置,并提供相关的工具代码示例。 1. **企业微信API介绍** 企业微信提供了丰富的API接口,包括但不限于用户管理、部门管理、消息推送等。回调配置主要是通过...
总的来说,Java回调机制是理解和掌握Java编程中必不可少的一部分,它帮助我们构建更灵活、可扩展的系统,同时也为处理异步操作和事件驱动的程序设计提供了强大的工具。通过深入理解并熟练运用回调,开发者可以编写出...
本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...
主要是Java对接iOS内购,回调验证相关的方法, 真机测试的时候,一定要退出原来的账号,才能用沙盒测试账号,二次验证,请注意区分宏, 测试用沙盒验证,App Store审核的时候也使用的是沙盒购买,所以验证购买凭证的...
在本文中,我们将深入探讨如何在SpringBoot框架中进行海康威视SDK的二次开发,特别是关于报警回调功能。海康威视是全球知名的安防设备供应商,其SDK为开发者提供了丰富的功能,允许我们与监控设备进行高效交互。而...
Java回调机制是一种编程设计模式,它允许一个对象在完成特定操作后调用另一个对象的方法。在Java中,由于没有像C++那样的函数指针,因此我们利用接口来实现回调功能。下面将详细介绍如何在Java中实现回调机制。 1. ...
TaskHandler.java文件是回调模式的另一个关键部分,它实现了Callback接口。TaskHandler的实现中定义了当任务成功完成时执行的操作,以及当任务失败时执行的处理。这个类是回调函数被实际调用的地方,展示了如何在...
Java 回调函数与观察者模式实例代码,主要介绍了 Java 回调函数与观察者模式的实现,分享了相关代码示例。观察者模式是一种软件设计模式,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动...
这几天搞搞JNA,主要是组内...C++部分使用ACE实现了一个线程,线程中调用Java部分的回调函数。 C++使用vc8开发,代码跨平台,不过偷懒,没写makefile, 其中使用了ACE这个库。 Java部分,使用eclipse。jdk1.5版本。
JNI_C回调Java
"C回调Java方法"是指从C代码中调用Java的方法,这通常通过Java Native Interface(JNI)实现。JNI是Java平台标准的一部分,它提供了一套接口让Java代码能够调用本地(非Java)代码,反之亦然。本文将详细探讨C回调...
本项目基于Java语言,在Android平台上设计实现了一个简单的回调机制,源码包含了多种文件类型,覆盖了从配置到资源的各个方面,全面展示了如何在Android项目中应用回调设计模式。 首先,源码包中包含了15个XML配置...
Java Web设计模式是一种在开发基于Java的Web应用程序时遵循的成熟解决方案,它们是解决常见问题的最佳实践。设计模式提供了一种标准的、可重用的方法来组织代码,提高可读性、可维护性和可扩展性。以下是Java Web...
回调函数在Java编程中是一种常见的设计模式,它允许我们定义一个函数,然后将这个函数作为参数传递给另一个函数,由这个接收函数在适当的时候执行。这种方式使得代码更加灵活,能够处理异步操作或者在特定事件发生时...
【Java回调函数详解】 回调函数在编程中是一个重要的概念,尤其在处理异步操作或事件驱动的编程模型中。回调函数本质上是一种设计模式,允许我们将一个函数(或方法)作为参数传递给另一个函数,以便在特定时机被...
在安卓应用开发中,回调函数是一种常见的编程设计模式,它允许一个对象在完成特定操作时通知另一个对象。这种模式在事件驱动的系统中尤为常见,比如用户点击按钮、网络请求完成或者数据加载完毕等场景。回调函数使得...