静态代理
java中的静态代理就是上篇中设计模式的代理模式。
动态代理
代理类在程序运行时创建的代理方式叫作动态代理。
Spring框架中的AOP面向切面编程就是通过java的动态代理实现的。
java动态代理要求被代理的对象实现统一的接口。
代码实现
public class MyProxy implements InvocationHandler {
//被代理的对象(必须要实现统一的接口)
private Object target;
//提供一个接受被代理对象的构造器
public MyProxy(Object target) {
super();
this.target = target;
}
/**
* 执行目标对象的方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before method...");
//执行目标对象的方法
Object result = method.invoke(target, args);
System.out.println("after method...");
return result;
}
/**
* 获取目标对象的代理对象
* @return
*/
public Object newProxyInstance() {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class[] interfaces = target.getClass().getInterfaces();
return Proxy.newProxyInstance(loader, interfaces, this);
}
}