博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-模板方法模式及Callback
阅读量:6880 次
发布时间:2019-06-27

本文共 1311 字,大约阅读时间需要 4 分钟。

Spring对JDBC的抽象和对Hibernate的集成,都采用了一种理念或者处理方式,那就是模板方法模式与相应的Callback接口相结合。

 

 采用模板方法模式是为了以一种统一而集中的方式来处理资源的获取和释放,以JdbcTempalte为例,如下:

 

Java代码  
  1. public abstract class JdbcTemplate {  
  2.         
  3.       public final Object execute(String sql){  
  4.             Connection con=null;  
  5.             Statement stmt=null;  
  6.              try  
  7.              {  
  8.                  con=getConnection();  
  9.                  stmt=con.createStatement();  
  10.                  Object retValue=executeWithStatement(stmt,sql);  
  11.                  return retValue;  
  12.              }  
  13.              catch(SQLException e){  
  14.                  ...  
  15.              }  
  16.              finally  
  17.              {  
  18.                closeStatement(stmt);  
  19.                releaseConnection(con);  
  20.              }  
  21.        }  
  22.   
  23.        protected abstract Object executeWithStatement(Statement   stmt, String sql);  
  24. }  

   这样处理之后,JDBC代码的使用得到了规范,连接释放等问题也得到了统一的管理。

  但是,JdbcTemplate是抽象类,不能够独立使用,我们每次进行数据访问的时候都要给出一个相应的子类实现,这样肯定不方便,所以就引入了回调。

Java代码  
  1. public interface StatementCallback{  
  2.       Object doWithStatement(Statement stmt);  
  3. }  

  

 

Java代码  
  1. public class JdbcTemplate {  
  2.         
  3.       public final Object execute(StatementCallback callback){  
  4.             Connection con=null;  
  5.             Statement stmt=null;  
  6.              try  
  7.              {  
  8.                  con=getConnection();  
  9.                  stmt=con.createStatement();  
  10.                  Object retValue=callback.doWithStatement(stmt);  
  11.                  return retValue;  
  12.              }  
  13.              catch(SQLException e){  
  14.                  ...  
  15.              }  
  16.              finally  
  17.              {  
  18.                closeStatement(stmt);  
  19.                releaseConnection(con);  
  20.              }  
  21.        }  
  22.   
  23.        ...//其它方法定义  
  24. }  

 

使用如下:

 

Java代码  
  1. JdbcTemplate jdbcTemplate=...;  
  2. final String sql=...;  
  3. StatementCallback callback=new StatementCallback(){  
  4.       public Object=doWithStatement(Statement stmt){  
  5.              return ...;  
  6.       }  
  7. }  
  8.   
  9. jdbcTemplate.execute(callback);  

转载地址:http://qeubl.baihongyu.com/

你可能感兴趣的文章
DataQL 的表达式编译(自创的一种表达式编译算法)
查看>>
9.29PMP每日一题
查看>>
ORACLE 学习笔记1
查看>>
vmware格式转换
查看>>
beego mysql in查询
查看>>
git 回退版本
查看>>
go mod 在使用私有gitlab时“go-get=1”错误解决
查看>>
Tableau Server 9.1.2 配置集群手册
查看>>
java逻辑运算符
查看>>
org.bson.codecs.configuration.CodecConfigurationException
查看>>
jsoup抓取网页+详细讲解
查看>>
Python实现修改Windows CMD命令行输出颜色(完全解析)
查看>>
HQL语句讲解
查看>>
服务器安全狗linux版 V2.4 发布 增加网页木马扫描
查看>>
安全狗服云web端V3.4(企业服务)版上线
查看>>
在Android Library的Module中按渠道依赖
查看>>
对javascript匿名函数的理解(透彻版)
查看>>
使用virtualbox安装centos6的内置无线网卡桥接设置
查看>>
java调用http接口(HttpURLConnection的使用)
查看>>
java代码内,获得jsp产生的html
查看>>