Java 動態代理是 Spring AOP、RPC 框架、事務管理等核心基礎設施的基石。JDK 提供 `java.lang.reflect.Proxy` 與 `InvocationHandler` 兩大核心類,實現基於介面的代理。

// 1. 業務介面
public interface Subject {
void say(String str);
}
// 2. 真實實現
public class SubjectBean implements Subject {
@Override public void say(String str) { System.out.println(str); }
}
// 3. 自定義 InvocationHandler
public class MyInvocationHandler implements InvocationHandler {
private final Subject target;
public MyInvocationHandler(Subject target) { this.target = target; }
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("pre"); // 前置增強
Object result = method.invoke(target, args); // 調用目標方法
System.out.println("post"); // 後置增強
return result;
}
}
// 4. 代理工廠方法
public class ProxyFactory {
public static Subject createProxy(Subject target) {
return (Subject) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new MyInvocationHandler(target)
);
}
}
// 5. 客戶端調用
public class Main {
public static void main(String[] args) {
Subject target = new SubjectBean();
Subject proxy = ProxyFactory.createProxy(target);
proxy.say("hello"); // 輸出: pre -> hello -> post
}
}

掌握動態代理原理,是理解現代 Java 框架「無侵入式」增強能力的鑰匙。