论坛首页 入门技术论坛

动态代理Connection

浏览 1298 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-21  
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);
	}							
}
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics