JDBC连接池笔记--增强Connection对象中的close方法

1.写一个子类,覆盖close方法(由于传递的对象封装了大量的信息,不可行)

2.写一个connection的包装类,增强close方法(可以,但是有的代码量大)
3.用动态代理,返回一个代理对象出去,拦截close方法的调用,对close方法进行增强

 (可以使用BDCP或者C3P0)

--用包装设计模式对某个对象进行增强

1.写一个类,实现与被增强对象相同的接口

2.定义一个变量,指向被增强对象

3.定义一个构造方法,接受被增强对象

4.覆盖需要增强的方法

5.对于不需要增强的方法,直接调用被增强对象的方法

 

eg:

class MyConnection implements Connection {

  private Connection conn;
  private List<Connection> pool;

  public MyConnection(Connection conn, List<Connection> pool) {
    this.conn = conn;
    this.pool = pool;
  }

  @Override
  public void close() throws SQLException {
    pool.add(conn);
  }

  @Override

  不需要覆盖的直接调用原来的方法

 }

 

 --动态代理

@Override
public Connection getConnection() throws SQLException {
  if (list.size() > 0) {
    Connection conn = list.removeFirst();
    //return new MyConnection(conn, list);
    return (Connection) Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() {

      @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if(!method.getName().equals("close")){
          return method.invoke(conn, args);
        }else{
          return list.add(conn);
        }
      }
    });
   } else {
      throw new RuntimeException("DB busy");
   }
}

转载于:https://www.cnblogs.com/2qiang/p/6505543.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值