关于回调函数

看Spring源码中在sql操作处用回调函数觉得大为精妙,自己也写了一个demo,记录下来,以便以后可以参考。

TestCallBack.java 代码
  1. package per;   
  2.   
  3. public interface TestCallBack {   
  4.     Object doSomeThing(TestExecute executor) ;   
  5. }  

 

TestExecute.java 代码
  1. package per;   
  2.   
  3. public class TestExecute {   
  4.     public Object doExecute1() {   
  5.         System.out.println("in TestExecute doExecute1()");   
  6.         System.out.println("    can do sql operation1");   
  7.         return "";   
  8.     }   
  9.   
  10.     public Object doExecute2() {   
  11.         System.out.println("in TestExecute doExecute2()");   
  12.         System.out.println("    can do sql operation2");   
  13.         return "";   
  14.     }   
  15.   
  16. }  

 

TestTemplate.java 代码
  1. package per;   
  2.   
  3. public class TestTemplate {   
  4.   
  5.     public Object execute(TestCallBack action) {   
  6.         try {   
  7.             System.out.println("in TestTemplate execute()");   
  8.             System.out.println("    can create sql connection");   
  9.             TestExecute executor = new TestExecute();   
  10.             action.doSomeThing(executor);   
  11.             return "";   
  12.         } finally {   
  13.             System.out.println("in TestTemplate finally");   
  14.             System.out.println("    can close sql connection");   
  15.         }   
  16.     }   
  17.   
  18.     public Object doThing1() {   
  19.         System.out.println("in TestTemplate doThing1()");   
  20.         Object ob = execute(new TestCallBack() {   
  21.             public Object doSomeThing(TestExecute executor) {   
  22.                 System.out.println("in TestTemplate doThing()'s callback method");   
  23.                 executor.doExecute1();   
  24.                 return "";   
  25.             }   
  26.         });   
  27.         return ob;   
  28.     }   
  29.   
  30.     public Object doThing2() {   
  31.         System.out.println("in TestTemplate doThing2()");   
  32.         Object ob = execute(new TestCallBack() {   
  33.             public Object doSomeThing(TestExecute executor) {   
  34.                 System.out.println("in TestTemplate doThing()'s callback method");   
  35.                 executor.doExecute2();   
  36.                 return "";   
  37.             }   
  38.         });   
  39.         return ob;   
  40.     }   
  41. }   

 

TestRun.java 代码
  1. package per;   
  2.   
  3. public class TestRun {   
  4.   
  5.     public static void main(String[] args) {   
  6.         new TestTemplate().doThing1();   
  7.         new TestTemplate().doThing2();   
  8.     }   
  9.   
  10. }   

输出结果为:

  1. in TestTemplate doThing1()   
  2. in TestTemplate execute()   
  3.     can create sql connection   
  4. in TestTemplate doThing()'s callback method   
  5. in TestExecute doExecute1()   
  6.     can do sql operation1   
  7. in TestTemplate finally  
  8.     can close sql connection   
  9. in TestTemplate doThing2()   
  10. in TestTemplate execute()   
  11.     can create sql connection   
  12. in TestTemplate doThing()'s callback method   
  13. in TestExecute doExecute2()   
  14.     can do sql operation2   
  15. in TestTemplate finally  
  16.     can close sql connection  

 

用回调函数,我们可以把创建数据库连接和数据库关闭操作单独出去,而不用在每一次数据库操作时都要先建立连接,再进行数据库操作,操作完后还要关闭连接,而且数据库操作还得放在try catch finally当中。

Excellent, Rod Johnson !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值