代理模式
所谓代理模式是指,为目标对象提供一个代理对象,以替代对于目标对象的访问。代理模式的实现过程是:实现代理对象的接口,并包含一个指向目标对象的引用。Java中对于代理模式的实现是动态代理。
动态代理
动态代理提供了Proxy和InvocationHandler两个接口,提供了对于代理模式的通用实现。典型的动态代理代码如下所示:模拟Spring中的AOP功能,在方法被调用前后插入代码。
package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test4 {
public static void main(String[] args) {
RealSubject target = new RealSubject();
Subject proxy = (Subject) Proxy.newProxyInstance(target.getClass()
.getClassLoader(), target.getClass().getInterfaces(),
new MyInvocationHandler(target));
proxy.request();
}
public static class MyInvocationHandler implements InvocationHandler {
private Subject target;
public MyInvocationHandler(Subject target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before");
Object result = method.invoke(target, args);
System.out.println("after");
return result;
}
}
}
interface Subject {
void request();
}
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("real subject");
}
}