通过目标对象来创建代理对象。调用代理对象的方法,做一些其他的事务,之后,代理对象调用目标对象的方法。
目标对象实现的接口:
public interface Email {
public void send();
public void receive();
}
目标对象:
public class EmailFlash implements Email {
@Override public void send() {
System.out.println("send email 真正实现");
}
@Override public void receive() {
System.out.println("receive email 真正实现");
}
}
产生代理对象的工厂:
public class ProxyFactory {
public static Object getProxy(Object org)
{
Object proObj=null;
MyInvocationHandler myin=new MyInvocationHandler(org);
//生成代理对象
proObj=Proxy.newProxyInstance(org.getClass().getClassLoader(),org.getClass().getInterfaces(),myin);
//将生成的代理对象返回
return proObj;
}
}
MyInvocationHandler 类:
public class MyInvocationHandler implements InvocationHandler {
private Object org;//原始对象,即要代理的目标对象
public MyInvocationHandler(Object org)
{
this.org=org;
}
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result=null;
if(method.getName().equals("send"))
{
System.out.println("正式事务开始前");
result=method.invoke(org,args);
System.out.println("正式事务结束后");
}else{
result=method.invoke(org,args);
}
return result;
}
}
代理的底层是反射:反射可以参考反射