Artikel ini mengatur poin pengetahuan untuk agen dinamis Java, konten spesifiknya adalah sebagai berikut
1. Java Dynamic Proxy (Pernyataan Resmi Komparatif)
Model proxy adalah model desain Java yang umum digunakan. Karakteristiknya adalah bahwa kelas proxy dan kelas delegasi memiliki antarmuka yang sama. Kelas proxy terutama bertanggung jawab untuk preprocessing pesan, memfilter pesan, meneruskan pesan ke kelas delegasi, dan memproses pesan setelah acara. Biasanya ada hubungan antara kelas proxy dan kelas delegasi. Objek kelas proxy dikaitkan dengan objek kelas delegasi. Objek kelas proxy itu sendiri tidak benar -benar menerapkan layanan, tetapi menyediakan layanan spesifik dengan memanggil metode yang relevan dari objek kelas delegasi.
Menurut periode penciptaan agen, kelas agen dapat dibagi menjadi dua jenis.
Proxy Static: Dibuat oleh programmer atau secara otomatis menghasilkan kode sumber dengan alat tertentu dan mengkompilasinya. Sebelum program berjalan, file .class dari kelas proxy sudah ada.
Dinamis Proxy: Diciptakan secara dinamis menggunakan mekanisme refleksi saat program berjalan.
2. Implementasi Proxy Dinamis
java.lang.reflect.proxy,
Proxy menyediakan metode statis untuk membuat kelas dan instance proxy dinamis.
newProxyInstance ()
Mengembalikan contoh kelas proxy dari antarmuka yang ditentukan yang dapat menetapkan panggilan metode ke penangan panggilan yang ditentukan.
2.1. Antarmuka DAO (menyediakan antarmuka lapisan akses data simulasi)
Paket javaproxy;/** Tentukan antarmuka lapisan akses data*/antarmuka publik dao {// simulasikan penghematan data public void save ();} 2.2. Kelas Implementasi Kelas DaoImpl
paket javaproxy; Kelas Publik DaoImpl mengimplementasikan dao {@Override public void save () {System.out.println ("Jalankan metode simpan ................"); }} 2.3. Kelas pemrosesan agen
paket javaproxy; impor java.lang.reflect.invocationHandler; import java.lang.reflect.method; public class DaoHandler implements InvocationHandler{ private Object obj;public DaoHandler(Object obj) { this.obj=obj;} @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("do something before method");//The pre-method of AOP is simulated here Object ret = method.invoke(this.obj, args); System.out.println ("Lakukan sesuatu setelah metode"); // Post-Method AOP disimulasikan di sini pengembalian ret; }} 2.4. Panggilan klien
paket javaproxy; impor java.lang.reflect.proxy; klien kelas publik {public static void main (string [] args) {// metaObject (objek proxed) daoImpl daoImpl = new daoImpl (); // Kelas Proksi Bisnis DaoHandler DaoHandler = New DaoHandler (DaoImpl); Dao dao = (dao) proxy.newproxyInstance (daoImpl .getClass (). GetClassLoader (), daoImpl.getClass () .getInterfaces (), daoHandler); dao.save (); }}2. 5. Hasil
3. Simulasi implementasi proxy di mybatis
3.1. Kelas mapperproxy
Paket javaproxy; impor java.lang.reflect.invocationHandler; impor java.lang.reflect.method; impor java.lang.reflect.proxy; Metode Kelas Public @ * di sini * kami dapat mengimplementasikan {@suppresswarnings ("Unchecked") / * @param: jalankan metode dengan sqlSession** @return: return proxy objek*/ public static <t> t newmapperproxy (class <t> mapperinterface, objek sqlSession) {classloader classloader = mapperinterface.getClassLoader (); Kelas <?> [] Antarmuka = kelas baru [] {mapperInterface}; Proxy mapperproxy = mapperproxy baru (); return (t) proxy.newproxyInstance (classloader, antarmuka, proxy); } / *; Metode untuk menemukan peta parameter yang sesuai** @return: mengembalikan objek parameter yang dieksekusi*/ Invoke objek publik (proxy objek, metode metode, objek [] args) melempar lemparan {// di sini, operasi yang sesuai dilakukan dengan mem -parsing metode yang sesuai di sini); kembali nol; }} 3.2. Klien
paket javaproxy; impor java.lang.reflect.proxy; klien kelas publik {public static void main (string [] args) {dao dao = mapperproxy.newmapperproxy (dao.class, null); dao.save (); }}3.3. Hasil
Di atas adalah contoh menggunakan proxy dinamis JDK. Saya harap akan sangat membantu bagi semua orang untuk belajar pemrograman Java.