Mari kita bicara tentang mode proxy java dengan Anda
1. Proxy statis
1.1 Baik proxy proxy statis dan kelas proxy harus mempertahankan antarmuka umum.
antarmuka publik iuserdao {void save ();}1.2 Kelas Proxy, Objek Target
Userdao kelas publik mengimplementasikan iuserdao {@Override public void save () {System.out.println ("----- Data telah disimpan !!! ------"); }}1.3 Objek Proxy
kelas publik Userdaoproxy mengimplementasikan iuserdao {// menerima dan menyimpan objek target target iuserdao pribadi; Userdaoproxy publik (target iuserdao) {this.target = target; } @Override public void save () {System.out.println ("Mulai transaksi ..."); target.save (); // Metode untuk menjalankan target objek System.out.println ("Kirim Transaksi ..."); }}1.4 Kelas Uji
aplikasi kelas publik {public static void main (string [] args) {// target objek iuserdao target = Userdao baru (); // proxy iuserdao proxy = Ususdaoproxy baru (target); proxy.save (); // Jalankan metode proxy}} 2. Agen Dinamis
2.1 Demikian pula, proxy dinamis juga perlu menyelesaikan antarmuka. (Mirip dengan di atas)
2.2 Objek targetnya sama.
2.3 Ini hanya berbeda di objek proxy
ProxyFactory kelas publik {// Pertahankan target objek objek objek target target; proxyFactory publik (target objek) {this.target = target; } // menghasilkan objek proxy objek publik getProxyInstance () {return proxy.newProxyInstance (target.getClass (). GetClassLoader (), target.getClass (). GetInterfaces (), Metode InvocationHandler () {@override Objek publik Invoke (Object Proxy, Metode Metode, Metode, Metode,) {@Override Object Objek (Object. transaksi "); // Jalankan metode objek objek target returnValue = method.invoke (target, args); System.out.println (" Kirim transaksi "); return returnValue;}}); }}2.4 Kelas Uji
aplikasi kelas publik {public static void main (string [] args) {// target objek iuserdao target = Userdao baru (); System.out.println (target.getClass ()); // Buat objek proxy untuk objek target iuserdao proxy = (iuserdao) proxyFactory baru (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // jalankan metode [objek proxy] proxy.save (); }} 3. Proxy CGLIB
3.1CGLIB Proxy tidak perlu menyelesaikan antarmuka, ia hanya perlu menulis kelas dan kelas proxy untuk proxyed. Proksi di sini sama dengan 1.2, sehingga tidak lagi ditulis.
3.2 Kelas proxy berbeda. Saat menggunakan mode proxy CGLIB, Anda perlu merujuk ke paket kerangka kerja inti Spring.
ProxyFactory kelas publik mengimplementasikan MethodInterceptor {// Pertahankan Target Target Objek Privat Objek Target; proxyFactory publik (target objek) {this.target = target; } // Buat objek proxy untuk objek target objek publik getProxyInstance () {// 1. Penambah kelas alat EN = Enhancer baru (); // 2. Atur kelas induk en.setsuperclass (target.getClass ()); // 3. Atur fungsi callback en.setCallback (ini); // 4. Buat subkelas (objek proxy) return en.create (); } @Override Public Object Intercept (Object Obj, Metode Metode, Objek [] args, MethodProxy Proxy) melempar Throwable {System.out.println ("Mulai Transaksi ..."); // metode untuk menjalankan objek target objek returnValue = Method.invoke (target, args); System.out.println ("Kirim Transaksi ......"); Return ReturnValue; }}3.3 Kelas Uji
aplikasi kelas publik {public static void main (string [] args) {// target objek userdao target = new userdao (); System.out.println (target.getClass ()); // objek proxy userdao proxy = (userdao) proxyfactory baru (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // metode untuk menjalankan proxy objek proxy.save (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.