1. 定义需要代理的接口和实现
代码:
public interface Subject {
void operation();
}
public class RealSubject implements Subject{
@Override
public void operation() {
System.out.println("干活了");
}
}
2. 定义 DemoInvokerHandler
代码
public class DemoInvokerHandler implements InvocationHandler {
private Object target; // 真正的业务对象,也就是RealSubject对象
// DemoInvokerHandler构造方法
public DemoInvokerHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 在执行业务逻辑之前的预处理逻辑
System.out.println("在执行业务逻辑之前的预处理逻辑");
Object result = method.invoke(target, args);
// 在执行业务逻辑之后的后置处理逻辑
System.out.println("在执行业务逻辑之后的后置处理逻辑");
return result;
}
public Object getProxy() {
// 创建代理对象
return Proxy.newProxyInstance(Thread.currentThread()
.getContextClassLoader(),
target.getClass().getInterfaces(), this);
}
}
3. 使用
public class Main {
public static void main(String[] args) {
Subject subject = new RealSubject();
DemoInvokerHandler invokerHandler = new DemoInvokerHandler(subject);
// 获取代理对象
Subject proxy = (Subject) invokerHandler.getProxy();
// 调用代理对象的方法,它会调用DemoInvokerHandler.invoke()方法
proxy.operation();
}
}
4.结果
在执行业务逻辑之前的预处理逻辑
干活了
在执行业务逻辑之后的后置处理逻辑



