package com.yunchow.util;
import java.sql.*;
import java.lang.reflect.*;
/**
* connection处理器
* @author yunchow
* @version 1.2 09/8/6
*/
class MyConnection implements InvocationHandler {
/** 目标对象 */
private Connection targetConnection;
/** 代理对象 */
private Connection proxyConnection;
MyConnection(Connection conn) {
targetConnection = conn;
}
/**
* 释放一个连接资源
*/
void release() {
try {
if(targetConnection != null)
targetConnection.close();
//System.out.println("清除成功\t" + targetConnection.createStatement());
} catch(Exception ex) {
ex.printStackTrace();
}
}
Connection getProxy() {
proxyConnection = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(),
new Class[]{Connection.class, DBSourceRelease.class},this);
return proxyConnection;
}
public Object invoke(Object proxy,Method method,Object[] args)
throws Throwable {
if("close".equals(method.getName())){ // 截获close方法
MyDataSource.rebackConnection(proxyConnection);
return null;
} else if("release".equals(method.getName())) {
release();
return null;
}
return method.invoke(targetConnection, args);
}
}
动态代理Connection
最新推荐文章于 2022-08-24 21:44:55 发布