Rumah > Java > javaTutorial > Contoh analisis proksi dinamik dalam mekanisme refleksi Java

Contoh analisis proksi dinamik dalam mekanisme refleksi Java

PHPz
Lepaskan: 2023-05-13 08:37:05
ke hadapan
1377 orang telah melayarinya

1. Corak proksi

Corak proksi adalah untuk menyediakan proksi untuk objek lain untuk mengawal akses kepada objek ini. Malah, mod proksi memperkenalkan tahap pengalakan tertentu apabila mengakses objek Arahan ini boleh dilampirkan pada pelbagai tujuan.

Ciri-cirinya ialah kelas proksi dan kelas perwakilan mempunyai antara muka yang sama Kelas proksi bertanggungjawab terutamanya untuk prapemprosesan mesej untuk kelas perwakilan, menapis mesej, memajukan mesej kepada kelas perwakilan dan memproses mesej selepas itu. . Biasanya terdapat perkaitan antara kelas proksi dan kelas perwakilan Objek kelas proksi dikaitkan dengan objek kelas perwakilan Objek kelas proksi itu sendiri sebenarnya tidak melaksanakan perkhidmatan, tetapi dengan memanggil kaedah yang berkaitan daripada objek kelas perwakilan.

2. Klasifikasi

Kelas ejen boleh dibahagikan kepada dua jenis mengikut tempoh penciptaan, kelas proksi statik dan kelas proksi dinamik.

Kelas proksi statik: dibuat oleh pengaturcara atau kod sumber yang dijana secara automatik oleh alat tertentu dan kemudian disusun. Sebelum program dijalankan, fail .class bagi kelas proksi sudah wujud.

Kelas proksi dinamik: dibuat secara dinamik menggunakan mekanisme pantulan semasa program dijalankan.

3. Contoh proksi statik dan proksi dinamik

Proksi statik:

Kelas antara muka perniagaan:

rreee

Pelaksanaan antara muka perniagaan kelas :

package com.bjpowernode.pattern;   public interface UserManager {       public void addUser(String userId, String userName);            public void delUser(String userId);            public void modifyUser(String userId, String userName);            public String findUser(String userId);  }
Salin selepas log masuk

Kelas proksi perniagaan:

package com.bjpowernode.pattern;   public class UserManagerImpl implements UserManager {       public void addUser(String userId, String userName) {          //System.out.println("start-->>addUser() userId-->>" + userId);          try {              System.out.println("UserManagerImpl.addUser() userId-->>" + userId);                            //System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              //System.out.println("error-->>addUser()");              throw new RuntimeException();          }         }       public void delUser(String userId) {          System.out.println("UserManagerImpl.delUser() userId-->>" + userId);      }       public String findUser(String userId) {          System.out.println("UserManagerImpl.findUser() userId-->>" + userId);          return "张三";      }       public void modifyUser(String userId, String userName) {          System.out.println("UserManagerImpl.modifyUser() userId-->>" + userId);      }   }
Salin selepas log masuk

Kelas pelanggan:

package com.bjpowernode.pattern;   public class UserManagerImplProxy implements UserManager {       private UserManager userManager;            public UserManagerImplProxy(UserManager userManager) {          this.userManager = userManager;      }            public void addUser(String userId, String userName) {          try {              System.out.println("start-->>addUser() userId-->>" + userId);              userManager.addUser(userId, userName);              System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              System.out.println("error-->>addUser()");          }         }       public void delUser(String userId) {       }       public String findUser(String userId) {          return null;      }       public void modifyUser(String userId, String userName) {       }  }
Salin selepas log masuk

Hasil berjalan:

package com.bjpowernode.pattern;   public class Client {       /**       * @param args       */     public static void main(String[] args) {          //UserManager userManager = new UserManagerImpl();          UserManager userManager = new UserManagerImplProxy(new UserManagerImpl());          userManager.addUser("0001", "张三");      }   }
Salin selepas log masuk

Proksi dinamik:

Perniagaan Kelas antara muka:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
Salin selepas log masuk

Kelas pelaksanaan antara muka perniagaan:

package com.bjpowernode.pattern;   public interface UserManager {             public String test(String userId);  }
Salin selepas log masuk

Kelas BusinessHandler:

package com.bjpowernode.pattern;   public class UserManagerImpl implements UserManager {       public String test(String userId) {          System.out.println("UserManagerImpl.findUser() userId-->>" + userId);          return "张三";      }   }
Salin selepas log masuk

Kelas pelanggan:

package com.bjpowernode.pattern;   import java.lang.reflect.InvocationHandler;  import java.lang.reflect.Method;  import java.lang.reflect.Proxy;   public class BusinessHandler implements InvocationHandler {            private Object targetObject;            public Object newProxyInstance(Object targetObject) {                    this.targetObject = targetObject;          return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),                                 targetObject.getClass().getInterfaces(), this);      }            public Object invoke(Object proxy, Method method, Object[] args)              throws Throwable {          System.out.println("start-->>" + method.getName());          for (int i=0; i<args.length; i++) {              System.out.println(args[i]);          }          Object ret = null;          try {              //调用目标方法              ret = method.invoke(targetObject, args);              System.out.println("success-->>" + method.getName());           }catch(Exception e) {              e.printStackTrace();              System.out.println("error-->>" + method.getName());              throw e;          }          return ret;      }   }
Salin selepas log masuk

Hasil jalankan:

rreee

Atas ialah kandungan terperinci Contoh analisis proksi dinamik dalam mekanisme refleksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan