先看动态代理类
package ProxyDemo;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class MyProxy implements InvocationHandler { private Object obj; public Object init(Object ob) {
ClassLoader cl = ob.getClass().getClassLoader();
this.obj = Proxy.newProxyInstance(cl, ob.getClass().getInterfaces(),
this);
return obj;
} @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("123");
method.invoke(obj, args);
return null;
}}测试类
package ProxyDemo;import java.lang.reflect.InvocationHandler;
public class demo {
public static void main(String[] args) throws Exception { IProxyBiz pr = new MyAchieve();
MyProxy han = new MyProxy();
pr=(IProxyBiz)han.init(pr);
pr.say();
}
}异常为UndeclaredThrowableException 异常出现不断递归MyProxy.invoke 方法
代理实现类没问题 就简单的测试而已。
在线等结果。
package ProxyDemo;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class MyProxy implements InvocationHandler { private Object obj; public Object init(Object ob) {
ClassLoader cl = ob.getClass().getClassLoader();
this.obj = Proxy.newProxyInstance(cl, ob.getClass().getInterfaces(),
this);
return obj;
} @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("123");
method.invoke(obj, args);
return null;
}}测试类
package ProxyDemo;import java.lang.reflect.InvocationHandler;
public class demo {
public static void main(String[] args) throws Exception { IProxyBiz pr = new MyAchieve();
MyProxy han = new MyProxy();
pr=(IProxyBiz)han.init(pr);
pr.say();
}
}异常为UndeclaredThrowableException 异常出现不断递归MyProxy.invoke 方法
代理实现类没问题 就简单的测试而已。
在线等结果。
package 动态代理;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;class MyProxy implements InvocationHandler { private Object obj; public Object init(Object ob) {
obj = ob;
ClassLoader cl = ob.getClass().getClassLoader();
return Proxy.newProxyInstance(cl, ob.getClass().getInterfaces(), this); } @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("123");
method.invoke(obj, args);
return null;
}}class MyAchieve implements IProxyBiz {
@Override
public void say() {
System.out.println("say");
}
}interface IProxyBiz {
void say();
}public class Test123 {
public static void main(String[] args) throws Exception { IProxyBiz pr = new MyAchieve();
MyProxy han = new MyProxy();
pr = (IProxyBiz) han.init(pr);
pr.say(); }
}
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/**
* 动态代理对象
* @author penggl
* @version 1.0
*/
public class ObjectDynamicProxy implements InvocationHandler{ //真实对象引入
private Object proxyObj; public void setObj(Object obj) {
this.proxyObj = obj;
}
public ObjectDynamicProxy(Object obj){
this.proxyObj = obj;
} public Object invoke(Object object, Method method, Object[] args)
throws Throwable {
System.out.println("before dynamic proxy method.");
Object obj = method.invoke(proxyObj, args);
System.out.println("after dynamic proxy method.");
return obj;
}
/**
* 代理对象生产工厂
* @param obj
* @return
*/
public static Object factory(Object obj) {
//获取传入对象的Class对象
Class<?> classType = obj.getClass(); //生成代理对象并返回
//该对象实现传入对象所实现的接口
//生成的代理对象的所有方法都由第三个参数的invoke方法来接管和调用
return Proxy.newProxyInstance(classType.getClassLoader(), classType
.getInterfaces(), new ObjectDynamicProxy(obj));
}
}
//////////////////////////测试类
package com.study.dynamicproxy;import java.util.ArrayList;
import java.util.List;
/**
* 客户端测试
* @author penggl
* @version 1.0
*/
public class Client { @SuppressWarnings("unchecked")
public static void main(String[] args) {
//通过代理对象生成工厂生成该代理对象
List list = (List)ObjectDynamicProxy.factory(new ArrayList());
list.add("hello");
}
}