Rumah > Java > javaTutorial > Bagaimanakah kelas dalaman tanpa nama Java melaksanakan proksi dinamik?

Bagaimanakah kelas dalaman tanpa nama Java melaksanakan proksi dinamik?

WBOY
Lepaskan: 2024-04-30 17:36:01
asal
965 orang telah melayarinya

Kelas dalaman tanpa nama boleh digunakan untuk melaksanakan proksi dinamik dalam Java, melalui langkah berikut: 1. Tentukan antara muka 2. Buat kelas dalaman tanpa nama yang melaksanakan antara muka InvocationHandler 3. Gunakan kelas Proksi untuk mencipta objek proksi; 4. Panggil kaedah proksi. Dalam amalan, proksi dinamik boleh meningkatkan atau memintas panggilan kaedah, seperti merakam masa pelaksanaan kaedah.

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

Cara kelas dalaman tanpa nama Java melaksanakan proksi dinamik

Proksi dinamik ialah teknik untuk mencipta proksi objek pada masa jalan, membenarkan seruan objek dipertingkat atau dipintas kod tanpa mengubah suai sasaran Kelas dalaman tanpa nama boleh digunakan untuk melaksanakan proksi dinamik dalam Java.

1. Tentukan antara muka

Pertama, tentukan antara muka untuk mewakili kaedah objek sasaran:

interface Target {
    void doSomething();
}
Salin selepas log masuk

2 Buat kelas dalaman tanpa nama

Untuk membuat proksi dinamik, anda boleh menggunakan proksi dinamik. kelas dalaman untuk melaksanakan InvocationHandler Antara muka: InvocationHandler 接口:

InvocationHandler handler = new InvocationHandler() {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 增强或拦截方法调用
        return 1;
    }
};
Salin selepas log masuk

3. 创建代理对象

接下来,使用 Proxy 类创建代理对象:

Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),
        new Class[]{Target.class}, handler);
Salin selepas log masuk

4. 调用代理方法

现在可以调用代理对象上的方法,从而触发动态代理行为:

proxy.doSomething(); // 调用代理方法
Salin selepas log masuk

实战案例

以下是一个使用匿名内部类实现动态代理的简单示例:

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("原始方法执行");
    }
}
Salin selepas log masuk

在此示例中,动态代理充当 Targetrrreee

🎜3 Cipta objek proksi 🎜🎜🎜Seterusnya, gunakan kelas Proxy untuk mencipta objek proksi: 🎜rrreee🎜🎜. 4. Panggil kaedah proksi 🎜🎜🎜Kini anda boleh memanggil Kaedah pada objek proksi, dengan itu mencetuskan tingkah laku proksi dinamik: 🎜rrreee🎜🎜Contoh praktikal🎜🎜🎜Berikut ialah contoh mudah menggunakan kelas dalaman tanpa nama untuk melaksanakan dinamik proksi: 🎜rrreee🎜Dalam contoh ini, proksi dinamik bertindak sebagai Sasaran Proksi untuk antara muka yang melakukan peningkatan masa sebelum dan selepas memanggil kaedah asal. 🎜

Atas ialah kandungan terperinci Bagaimanakah kelas dalaman tanpa nama Java melaksanakan proksi dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan