Jadual Kandungan
0. Mod ejen
1 Proksi statik
AOP, model proksi asas
Rumah Java javaTutorial Contoh analisis proksi dinamik dan proksi statik dalam Java

Contoh analisis proksi dinamik dan proksi statik dalam Java

May 05, 2023 pm 09:37 PM
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();
    }
    Salin selepas log masuk
    Salin selepas log masuk

    2. Peranan ejen

    //房东
    public class Host implements Rent {
        public void rent() {
            System.out.println("房东要租房子");
        }
    }
    Salin selepas log masuk

    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("中介收费");
        }
    }
    Salin selepas log masuk

    Faedah mod ejen:

      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!
    Kelemahan:

    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

    Contoh analisis proksi dinamik dan proksi statik dalam Java3 🎜>

    Proksi dinamik mempunyai peranan yang sama seperti proksi statik

    • 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

      Dari perspektif JVM, proksi dinamik menjana kod bait kelas secara dinamik pada masa jalan dan dimuatkan ke dalam JVM .

    public class Client {
        public static void main(String[] args) {
            Host host = new Host();
            //代理,代理角色一般会有附属操作!
            Proxy proxy = new Proxy(host);
            proxy.rent();
        }
    }
    Salin selepas log masuk

    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

    • //Proxy是生成动态代理类,提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
      //InvocationHandler-- invoke 调用处理程序并返回接口, 是由代理实例的调用处理程序实现的接口 。
      Salin selepas log masuk
    • 1.

    : Pemuat kelas, digunakan untuk memuatkan objek proksi. loader2.: 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){
    }
    Salin selepas log masuk

    InvocationHandler1.InvocationHandlerproksi: 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 dinamik

    1 Tentukan antara mukarreee

    2 Antaramuka sewa

    public 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 Rent {
        public void rent();
    }
    Salin selepas log masuk
    Salin selepas log masuk

    : Apabila objek proksi dinamik kami memanggil kaedah asli, apa yang sebenarnya dipanggil ialah kaedah

    dan maka kaedah

    memanggil 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("房东要租房");
        }
    }
    Salin selepas log masuk
    invoke()invoke(): terutamanya mendapatkan objek proksi kelas tertentu melalui kaedah

    5. Penggunaan sebenar

    public 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;
        }
    }
    Salin selepas log masuk
    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!

    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

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Akan R.E.P.O. Ada Crossplay?
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

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

    Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

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

    Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

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

    Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

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

    Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

    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

    TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

    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.

    Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

    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

    Bagaimana untuk menjalankan aplikasi boot musim bunga pertama anda di Spring Tool Suite? Bagaimana untuk menjalankan aplikasi boot musim bunga pertama anda di Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

    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

    See all articles