jdk动态代理例子
1. 声明接口
package cn.zhengyong.proxy;
/**
* 接口
* @author zhengyong
*
*/
public interface OriginInterface {
public void testProxy();
}
2. 实现接口
package cn.zhengyong.proxy;
/**
* 实现类
* @author zhengyong
*
*/
public class OriginImpl implements OriginInterface{
@Override
public void testProxy() {
System.out.println("test finish.");
}
}
3. 创建代理类,需要持有接口对象
package cn.zhengyong.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
*
* 代理类实现InvocationHandler
*
* @author zhengyong
*
*/
public class OriginProxy implements InvocationHandler{
private Object target;
public OriginProxy(OriginInterface target){
super();
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("begin invoke method.");
Object result = method.invoke(target, args);
System.out.println("end invoke method.");
return result;
}
}
4. 创建测试类
package cn.zhengyong.proxy;
import java.lang.reflect.Proxy;
/**
* @author zhengyong
*
*/
public class ProxyTest {
public static void main(String[] args) {
// 实例化目标对象
OriginInterface target = new OriginImpl();
// 根据目标对象创建代理对象
OriginInterface proxy = (OriginInterface) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new OriginProxy(target));
// 调用代理对象方法
proxy.testProxy();
}
}
5. 运行结果
begin invoke method.
test finish.
end invoke method.