代碼
鏈接:https://pan.baidu.com/s/1ge7P1sf 密碼:yqwx
Test.java Mapper
public interface Test {
void test();
int demo(int a);
void run();
}
public interface UserDao {
void insert();
void delete();
void update();
}
TestHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class TestHandler implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// method 方法被invoke給統(tǒng)一處理
System.out.println("Call:"+method.getName());
Class type = method.getReturnType();
if(type == int.class) {
return 8;
}
return null;
}
}
ProxyDemo.java
import java.lang.reflect.Proxy;
public class ProxyDemo {
public static void main(String[] args) {
/**
* 利用動態(tài)代理創(chuàng)建Test接口的實例
*
* 利用動態(tài)代理可以統(tǒng)一處理一組接口方法何址,可以
* 在不改變目標(biāo)對象功能情況下為軟件擴(kuò)展新功能
*
*/
TestHandler handler = new TestHandler();
// new Cclass[]{} 中放的是被代理的接口
Object obj = Proxy.newProxyInstance(ProxyDemo.class.getClassLoader(),
new Class[] {Test.class,UserDao.class}, handler);
// 利用反射檢查 obj 對象的具體類型
System.out.println(obj.getClass());
Test test = (Test)obj;
int n = test.demo(5);
System.out.println(n);
test.test();
test.run();
UserDao dao = (UserDao)obj;
dao.insert();
dao.delete();
dao.update();
}
}