jdk动态代理
/**
* 获取目标对象的代理对象
* @param t 要代理的对象
* @return 返回一个代理对象
*/
public static <T> T getProxy(T t){
InvocationHandler h = new InvocationHandler(){
/**
* @param proxy 要代理的对象
* @param method 对象的方法
* @param args 对象的方法的参数
* @return 返回的代理对象
* @throws Throwable 外抛异常
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName() + " 方法执行了 " + "参数是 " + Arrays.toString(args));
System.out.println(" 结果是 " + method.invoke(t, args));
return method.invoke(t, args);
}
};
// 获取代理类的接口
Class<?>[] interfaces = t.getClass().getInterfaces();
// 获取代理类的类加载器
//ClassLoader loader = t.getClass().getClassLoader();
// proxy 为目标对象创建代理
Object proxy = Proxy.newProxyInstance(MyFactory.class.getClassLoader(), interfaces, h);
return (T) proxy;
}