目标: 利用反射 动态代理
Counter 接口
public interface Counter {
int add(int a,int b);
int sub(int a,int b);
}
Counter 实现类
public class CounterImpl implements Counter {
//方法为切入点
@Override
public int add(int a, int b) {
System.out.println(a + b);
return a + b;
}
@Override
public int sub(int a, int b) {
System.out.println(a - b);
return a - b;
}
}
测试类
public class ClassTest {
public static void main(String[] args) {
/**
* 目标 : java JDK 的动态代理就是一个
* 泛型的 反射封装
*/
ClassLoader classLoader = ClassTest.class.getClassLoader();
Class[] cl = {
Counter.class
};
class MyInvocationHandler<T> implements InvocationHandler {
T t;
public MyInvocationHandler(T t) {
this.t = t;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("前置方法");
Object invoke = method.invoke(t, args);
System.out.println("后置方法");
return invoke;
}
}
Counter o = (Counter) Proxy.newProxyInstance(
classLoader, cl, new MyInvocationHandler(new CounterImpl())
);
o.add(1,1);
}
}