Java 中可以使用匿名內部類別實作動態代理,透過以下步驟:1. 定義介面;2. 建立實作 InvocationHandler 介面的匿名內部類別;3. 使用 Proxy 類別建立代理物件;4. 呼叫代理方法。實戰中,動態代理可以增強或攔截方法調用,如記錄方法執行時間。
Java 匿名內部類別如何實作動態代理
動態代理程式是一種用於在執行時間建立物件代理的技術,允許在不修改目標類別程式碼的情況下增強或攔截物件的呼叫。 Java 中可以使用匿名內部類別來實作動態代理。
1. 定義介面
首先,定義一個介面來表示目標物件的方法:
interface Target { void doSomething(); }
2. 建立匿名內部類
要建立動態代理,可以使用匿名內部類別實作InvocationHandler
# 介面:
InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强或拦截方法调用 return 1; } };
3. 建立代理物件
#接下來,使用Proxy
類別建立代理物件:
Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(), new Class[]{Target.class}, handler);
#4. 呼叫代理方法
##現在可以呼叫代理物件上的方法,從而觸發動態代理行為:proxy.doSomething(); // 调用代理方法
實戰案例
#以下是使用匿名內部類別實作動態代理的簡單範例:public class Main { public static void main(String[] args) { Target target = new TargetImpl(); InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强方法调用 long startTime = System.nanoTime(); Object result = method.invoke(target, args); long endTime = System.nanoTime(); System.out.println("方法执行时间:" + (endTime - startTime) + " 纳秒"); return result; } }; Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(), new Class[]{Target.class}, handler); proxy.doSomething(); } } interface Target { void doSomething(); } class TargetImpl implements Target { @Override public void doSomething() { System.out.println("原始方法执行"); } }
Target 介面的代理,在呼叫原始方法之前和之後,它執行計時增強。
以上是Java 匿名內部類別如何實作動態代理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!