public class Proxy {
interface Subject {
void print();
}
class RealSubject implements Subject {
public void print() {
System.out.println("subject...");
}
}
//JDK的动态代理
class SubjectProxy implements InvocationHandler {
Object obj = null;
public SubjectProxy() {
}
public SubjectProxy(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before...");
Object object = method.invoke(obj, args);
System.out.println("after...");
return object;
}
public Object factory(Object obj) {
Class clazz = obj.getClass();
return java.lang.reflect.Proxy.newProxyInstance(clazz.getClassLoader(),
clazz.getInterfaces(), new SubjectProxy(obj));
}
}
interface Business{
void print();
}
class BusinessImpl implements Business{
public void print() {
System.out.println("business...");
}
}
//静态代理
class BusinessProxy implements Business{
BusinessImpl bi;
public void print() {
if(null == bi){
bi = new BusinessImpl();
}
System.out.println("business before...");
bi.print();
System.out.println("business after...");
}
}
public static void main(String[] args) {
Proxy p = new Proxy();
System.out.println("动态代理...");
RealSubject rs = p.new RealSubject();
Subject subject = (Subject) p.new SubjectProxy().factory(rs);
subject.print();
BusinessImpl bi = p.new BusinessImpl();
Business b = (Business) p.new SubjectProxy().factory(bi);
b.print();
System.out.println("静态代理...");
BusinessProxy bp = p.new BusinessProxy();
bp.print();
}
}
//http://www.blogjava.net/interface/archive/2008/01/04/172841.html?opt=admin