//抽象主题角色
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();
}