Contoh analisis proksi dinamik dan proksi statik dalam Java
0. Mod ejen
Mengapa kita perlu mempelajari mod ejen? Ini ialah lapisan bawah SpringAOP [SpringAOP dan SpringMVC]
Klasifikasi mod proksi:
Proksi statik
-
Proksi dinamik
1 Proksi statik
Dalam proksi statik, peningkatan kami bagi setiap kaedah objek sasaran dilakukan secara manual ( The kod akan ditunjukkan secara terperinci kemudian_), sangat tidak fleksibel (contohnya, sebaik sahaja kaedah baharu ditambahkan pada antara muka, objek sasaran dan objek proksi mesti diubah suai) dan menyusahkan (_perlu menulis kelas proksi berasingan untuk setiap kelas sasaran ). Terdapat sangat sedikit senario aplikasi sebenar, dan hampir tiada senario di mana proksi statik digunakan dalam pembangunan harian.
Analisis peranan:
Peranan abstrak: Secara umumnya, antara muka atau kelas abstrak digunakan untuk menyelesaikan masalah
Watak sebenar: watak ejen
Peranan ejen: ejen untuk watak sebenar Selepas berlakon untuk watak sebenar, kami biasanya melakukan beberapa operasi subsidiari
Pelanggan: Orang yang mengakses objek proksi!
Langkah kod:
1 Antara Muka
public interface Rent { public void rent(); }
2. Peranan ejen
//房东 public class Host implements Rent { public void rent() { System.out.println("房东要租房子"); } }
4. Akses pelanggan kepada peranan ejen
public class Proxy implements Rent{ private Host host; public Proxy() { } public Proxy(Host host) { this.host = host; } public void rent(){ seeHouse(); host.rent(); fare(); } //看房 public void seeHouse(){ System.out.println("中介带你看房"); } //收中介费 public void fare(){ System.out.println("中介收费"); } }
- boleh buat peranan sebenar Operasi ini lebih tulen! Tidak perlu memberi perhatian kepada beberapa perniagaan awam
- Orang ramai akan diserahkan kepada peranan ejen! Realisasikan pembahagian kerja dalam perniagaan!
- Apabila perkhidmatan awam berkembang, pengurusan berpusat adalah mudah!
Peranan sebenar akan menjana peranan proksi dari perspektif JVM, proksi statik menukar antara muka, kelas Pelaksanaan dan kelas proksi telah menjadi fail kelas sebenar.
2. Memperdalam pemahaman anda tentang
AOP, model proksi asas
3 🎜>
- Kelas proksi proksi dinamik dijana secara dinamik, bukan ditulis secara langsung oleh kami!
- Proksi dinamik dibahagikan kepada dua kategori: proksi dinamik berasaskan antara muka dan proksi dinamik berasaskan kelas
Berasaskan antara muka— —JDK proksi dinamik
- Berdasarkan kelas: cglib dynamic proksi
- java bytecode pelaksanaan: javasist
Anda perlu memahami dua kelas: Proksi: kelas proksi, InvocationHandler: pengendali panggilan
public class Client { public static void main(String[] args) { Host host = new Host(); //代理,代理角色一般会有附属操作! Proxy proxy = new Proxy(host); proxy.rent(); } }
Faedah proksi dinamik:
boleh menjadikan pengendalian aksara sebenar lebih tulen! Tidak perlu berurusan dengan beberapa perniagaan awam
- Hal ehwal awam akan diserahkan kepada peranan ejen! Pelaksanaan
1.
//Proxy是生成动态代理类,提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。 //InvocationHandler-- invoke 调用处理程序并返回接口, 是由代理实例的调用处理程序实现的接口 。
: Pemuat kelas, digunakan untuk memuatkan objek proksi. loader
2.: Beberapa antara muka yang dilaksanakan oleh kelas proksi;
3.interfaces
: Melaksanakan Objek antara muka
Untuk melaksanakan proksi dinamik, anda juga mesti melaksanakan untuk menyesuaikan logik pemprosesan. Apabila objek proksi dinamik kami memanggil kaedah, panggilan ke kaedah ini akan dimajukan ke kaedah h
kelas yang melaksanakan antara muka InvocationHandler
.
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h){ }
InvocationHandler
1.InvocationHandler
proksi: kelas proksi yang dijana secara dinamikinvoke
2.kaedah: sepadan dengan kaedah yang dipanggil oleh objek kelas proksi
3.args: Parameter kaedah kaedah semasa
Contoh proksi dinamik1 Tentukan antara mukarreee
2 Antaramuka sewapublic interface InvocationHandler {
Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}
Salin selepas log masuk
3. Tentukan kaedah kelas proksi dinamik JDK public interface InvocationHandler { Object invoke(Object proxy, Method method, Object[] args) throws Throwable; }
public interface Rent { public void rent(); }
: Apabila objek proksi dinamik kami memanggil kaedah asli, apa yang sebenarnya dipanggil ialah kaedah
dan maka kaedahmemanggil kaedah asli objek proksi bagi pihak kami.
4. Dapatkan kelas kilang objek proksiinvoke()
public class Host implements Rent { @Override public void rent() { System.out.println("房东要租房"); } }
invoke()
invoke()
: terutamanya mendapatkan objek proksi kelas tertentu melalui kaedah 5. Penggunaan sebenarpublic class DebugInvocationHandler implements InvocationHandler { /** * 代理类中的真实对象 */ private final Object target; public DebugInvocationHandler(Object target){ this.target = target; } /** * 当你使用代理对象调用方法的时候实际会调用到这个方法 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //调用方法前 System.out.println("before method" + method.getName()); Object res = method.invoke(target, args); //调用方法后 System.out.println("after method" + method.getName()); return res; } }
getProxy()
Proxy.newProxyInstance()
Output menjalankan ejen di atas
sebelum methodrentTuan tanah ingin menyewaselepas methodrent
Atas ialah kandungan terperinci Contoh analisis proksi dinamik dan proksi statik dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Spring Boot memudahkan penciptaan aplikasi Java yang mantap, berskala, dan siap pengeluaran, merevolusi pembangunan Java. Pendekatan "Konvensyen Lebih Konfigurasi", yang wujud pada ekosistem musim bunga, meminimumkan persediaan manual, Allo
