主要使用了java.lang.reflect中的Proxy類,方法如下:static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)下麵是利用JDBC做的測試,類似於重寫了Con...
主要使用了java.lang.reflect中的Proxy類,
方法如下:
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
下麵是利用JDBC做的測試,類似於重寫了Connection的close方法。代碼如下:
package com.victor_03; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.DriverManager; import org.junit.Test; public class MyPool { private String url = "jdbc:mysql://192.168.244.144:3306/test"; private String user = "root"; private String password = "123456"; @Test public void ProxyTest() throws Exception { Class.forName("com.mysql.jdbc.Driver"); final Connection conn = DriverManager.getConnection(url, user, password); Connection proxy = (Connection) Proxy.newProxyInstance( conn.getClass().getClassLoader(), //類載入器 //目標對象實現的介面,因該Connection本來就是個結果,故使用這種方法,如果目標對象本身是類,則使用方式為:conn.getClass().getInterfaces() new Class[] { Connection.class }, new InvocationHandler() { //當調用conn對象方法時,自動觸發事務處理器 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; String methodName = method.getName(); if ("close".equals(methodName)) { System.out.println("開始執行close方法"); } else { result = method.invoke(conn, args); } return result; } }); proxy.close(); } }