package pattern;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicPattern {
public static void main(String[] args) throws Throwable {
DynamicTest dynamicTest = new DynamicTest(new TChildren());
// T t = (T) Proxy.newProxyInstance(DynamicTest.class.getClassLoader(), new Class[]{T.class},dynamicTest);
// t.test();//这里是获取被代理的对象
dynamicTest.invoke(T.class,T.class.getMethod("test"),null);//这里才是通过动态代理对象去调用方法。传参、被代理的对象和对应的方法,第三个参数是方法的参数
}
}
class DynamicTest implements InvocationHandler {
Object target;
public DynamicTest(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行代理前的方法");
System.out.println("执行代理方法"+method.getName());
System.out.println(method);
Object invoke = method.invoke(target,args);
System.out.println("执行代理后的方法");
return invoke;
}
}
interface T{
void test();
}
class TChildren implements T{
@Override
public void test() {
System.out.println("要被代理的方法执行了-----------");
}
}