ITPub博客

首页 > 应用开发 > Java > JAVA接口回调

JAVA接口回调

原创 Java 作者:百联达 时间:2016-11-28 17:18:29 0 删除 编辑
一:回调的用途

回调一般用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调。例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。

所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。

二:JAVA实现接口回调


1.回调接口


点击(此处)折叠或打开

  1. public interface CallbackInterface {

  2.     public void callbackMethod();
  3. }



2.接口引用

点击(此处)折叠或打开

  1. public class Caller {

  2.     public CallbackInterface callback;

  3.     /**
  4.      * @param callback
  5.      * the callback to set
  6.      */
  7.     public void setCallback(CallbackInterface callback) {
  8.         this.callback = callback;
  9.     }

  10.     public void call() {
  11.         this.callback.callbackMethod();
  12.     }

  13. }
3.接口回调类

点击(此处)折叠或打开

  1. public class Client implements CallbackInterface{

  2.     /* (non-Javadoc)
  3.      * @see com.enjoylink.gmap.mongodb.demo.CallbackInterface#callbackMethod()
  4.      */
  5.     @Override
  6.     public void callbackMethod() {
  7.         
  8.         System.out.println("this is the client callbackMethod.");
  9.     }

  10. }

4.测试类

点击(此处)折叠或打开

  1. public class CallbackTest {

  2.     public static void main(String[] args) {

  3.         Caller caller = new Caller();
  4.         // Client client = new Client();
  5.         // caller.setCallback(client);
  6.         caller.setCallback(new CallbackInterface() {
  7.             @Override
  8.             public void callbackMethod() {
  9.                 System.out.println("匿名类回调");
  10.             }
  11.         });
  12.         caller.call();
  13.     }
  14. }

三:Spring JdbcTemplate中的回调实例

对于spring的JdbcTemplate进行结果集查询操作,spring给我们开发的是一系列的query方法,这些查询的方法中回调的接口主有三种:ResultSetExtractor,RowCallbackHandler,RowMapper,这个内容有图有真相:



1. ResultSetExtractor 

点击(此处)折叠或打开

  1. public interface ResultSetExtractor {
  2.        Object extractData(ResultSet rs) throws SQLException,
  3.                                                 DataAccessException;
  4.     }

点击(此处)折叠或打开

  1. List<User> userList = (List<User>)jdbcDao.getJdbcTemplate().
  2.                                    query("select * from T_USER", new ResultSetExtractor() {
  3.             @Override
  4.             public Object extractData(ResultSet rs) throws SQLException,
  5.                                                             DataAccessException {
  6.                  List<User> userList = new ArrayList<User>();
  7.                  while (rs.next()) {
  8.                     User user = new User();
  9.                     user.setId(rs.getInt("N_ID"));
  10.                     user.setName(rs.getString("C_NAME"));
  11.                     userList.add(user);
  12.                  }
  13.                  return userList;
  14.             }
  15.     });
2.RowCallbackHandler

点击(此处)折叠或打开

  1. public interface RowCallbackHandler {
  2.            void processRow(ResultSet rs) throws SQLException;

  3.      }

点击(此处)折叠或打开

  1. final List<User> userList = new ArrayList<User>();
  2.   jdbcDao.getJdbcTemplate().query("select * from T_USER",
  3.                                                      new RowCallbackHandler(){
  4.        @Override
  5.        public void processRow(ResultSet rs) throws SQLException {
  6.            User user = new User();
  7.            user.setId(rs.getInt("N_ID"));
  8.            user.setName(rs.getString("C_NAME"));
  9.            userList.add(user);
  10.        }
  11.    });
3.RowMapper


点击(此处)折叠或打开

  1. public interface RowMapper {
  2.      Object mapRow(ResultSet rs, int rowNum) throws SQLException;
  3. }


点击(此处)折叠或打开

  1. List<User> userList = (List<User>)jdbcDao.getJdbcTemplate().
  2. query("select * from T_USER", new RowMapper(){
  3.             @Override
  4.             public Object mapRow(ResultSet rs, int rowNumber)
  5. throws SQLException {
  6.                 User user = new User();
  7.                 user.setId(rs.getInt("N_ID"));
  8.                 user.setName(rs.getString("C_NAME"));
  9.                 return user;
  10.             }
  11.       });

四:Android中的接口回调

在android中回调机制被大量的使用。比如,在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。

举个简单的例子就是Button的点击响应事件实现机制


点击(此处)折叠或打开

  1. button.setOnClickListener(new OnClickListener()
  2.         {
  3.             @Override
  4.             public void onClick(View v)
  5.             {

  6.             }
  7.         });
OnClickListener就是android系统所约好的接口,然后在我们写的应用程序中传入回调对象,这样就可以达到接口统一,实现不同的效果。




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-2129241/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Centos6.5 Docker安装
下一篇: Java Filter过滤器
请登录后发表评论 登录
全部评论
15年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的设计落地实施,8年系统架构经验。最近关注企业数字化转型、财务数字化服务共享、大语言模型、Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    332
  • 访问量
    1265642