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.
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(); }
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; } };
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
rrreee
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 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!