超级简单的代码示例,我更喜欢简单的代码去表达动态代理的思想
/**
* @ClassName ProxyInterface
* @Description 代理对象
* @Autor d
* @Date 2019/2/26 15:05
* @Version 1.0
*/
public interface ProxyInterface {
/**
* 代理方法
*/
void method();
}
/**
* @ClassName RealObject
* @Description 真实对象(被代理的对象)
* @Autor d
* @Date 2019/2/26 15:07
* @Version 1.0
*/
public class RealObject implements ProxyInterface {
/**
* 真实对象的方法(被代理的方法)
*/
@Override
public void method() {
System.out.println("*********动态代理********");
}
}
/**
* @ClassName ProxyInvocationHandle
* @Description TODO
* @Autor d
* @Date 2019/2/26 15:17
* @Version 1.0
*/
public class ProxyInvocationHandle<T> implements InvocationHandler {
public T object;
/**
* 构造方法 (关键)
* @param object
*/
public ProxyInvocationHandle(T object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("所有的方法都会被替换成invoke方法");
Object invoke = method.invoke(object, args);
return invoke;
}
}
/**
* @ClassName Test
* @Description 动态代理测试类
* @Autor d
* @Date 2019/2/26 15:20
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
ProxyInterface proxyInterface = new RealObject();
InvocationHandler invocationHandler = new ProxyInvocationHandle<ProxyInterface>(proxyInterface);
ProxyInterface proxy =(ProxyInterface)Proxy.newProxyInstance(ProxyInterface.class.getClassLoader(), new Class<?>[]{ProxyInterface.class}, invocationHandler);
proxy.method();
}
}