//抽象主題角色
interface Subject {
public void request();
}
//******************************************************************
//******************************************************************
//******************************************************************
//具體主題角色
public class RealSubject implements Subject {
//實作方法
@Override
public void request() {
//業務邏輯處理
System.out.println("實作Subject request方法");
}
}
//******************************************************************
//******************************************************************
//******************************************************************
public class SubjectHandle implements InvocationHandler {
//被代理的對象
private Subject subject;
public SubjectHandle(Subject _subject) {
subject = _subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("預處理");
Object obj = method.invoke(subject, args);
System.out.println("後處理");
return obj;
}
}
//******************************************************************
//******************************************************************
//******************************************************************
public static void main(String[] args) {
// 具體主題角色,也就是被代理類
Subject subject = new RealSubject();
// 代理執行個體的處理Handle
InvocationHandler handle = new SubjectHandle(subject);
// 目前加載器
ClassLoader loader = subject.getClass().getClassLoader();
// 動态代理
Subject proxy = (Subject) Proxy.newProxyInstance(loader, subject.getClass().getInterfaces(), handle);
// 執行具體主題角色方法
proxy.request();
}