ホームページ  >  記事  >  Java  >  Java匿名内部クラスに動的プロキシを実装するにはどうすればよいですか?

Java匿名内部クラスに動的プロキシを実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-04-30 17:36:01911ブラウズ

匿名内部クラスは、次の手順で Java で動的プロキシを実装するために使用できます: 1. インターフェイスを定義します。 2. InvocationHandler インターフェイスを実装する匿名内部クラスを作成します。 3. Proxy クラスを使用してプロキシを作成します。オブジェクト; 4. プロキシ メソッドを呼び出します。実際の戦闘では、動的エージェントはメソッドの実行時間を記録するなど、メソッド呼び出しを強化または傍受できます。

Java 匿名内部类如何实现动态代理?

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。プロキシ メソッド ##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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。