Rumah > Java > javaTutorial > Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?

Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?

王林
Lepaskan: 2023-05-10 15:52:18
ke hadapan
3188 orang telah melayarinya

1. springboot 2.x dan ke atas

Cglib akan digunakan secara lalai dalam SpringBoot 2.x AOP, tetapi proksi dinamik jdk masih digunakan secara lalai dalam Spring5. Spring AOP menggunakan proksi dinamik JDK secara lalai Jika objek tidak melaksanakan antara muka, proksi CGLIB digunakan. Sudah tentu, ia juga mungkin untuk memaksa penggunaan proksi CGLIB.

Dalam SpringBoot, AOP dipasang secara automatik melalui AopAutoConfiguration.

Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?

2 AOP masih menggunakan proksi dinamik JDK secara lalai

Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?3 Mengapakah SpringBoot 2.x menggunakan Cglib secara lalai

Kerana proksi dinamik JDK adalah berdasarkan antara muka , proksi Objek yang dihasilkan hanya boleh diberikan kepada pembolehubah antara muka. Proksi dinamik JDK menggunakan Proxy.newProxyInstance() untuk mencipta kelas pelaksanaan proksi Walau bagaimanapun, parameter kedua memerlukan jenis antara muka Jika tiada jenis antara muka, ralat akan dilaporkan.

Proxy.newProxyInstance(iCustomerInstance.getClass().getClassLoader(), iCustomerInstance.getClass().getInterfaces(), this);
Salin selepas log masuk

CGLIB tidak mempunyai masalah ini. Oleh kerana CGLIB dilaksanakan dengan menjana subkelas, sama ada objek proksi diperuntukkan kepada antara muka atau kelas pelaksanaan, kedua-duanya ialah kelas induk bagi objek proksi.

Jadi dalam versi 2.x dan ke atas, pelaksanaan lalai AOP ditukar kepada proksi CGLIB.

Buat antara muka baharu

public interface ICustomService {
    void printf();
}
Salin selepas log masuk

Buat kelas pelaksanaan baharu ICustomService

@Service
public class CustomServiceImpl implements ICustomService {
 
    public void printf() {
 
    }
}
Salin selepas log masuk

Tambah kelas lain yang tidak melaksanakan sebarang antara muka

@Service
public class CustomNoImpl {
 
    public void hello() {
        
    }
}
Salin selepas log masuk

dan kemudian mulakan itu, anda boleh menggunakan ICustomService dan CustomNoImpl melihat bahawa proksi AOP menggunakan proksi dinamik CGLIB

Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP? Kemudian kami menetapkan proksi kepada proksi JDK secara lalai melalui konfigurasi application.properties.

spring.aop.proxy-target-class=false
Salin selepas log masuk

Kemudian mula menyahpepijat dan mendapati CustomNoImpl menggunakan proksi yang dijana oleh CGLIB kerana ia tidak melaksanakan antara muka, manakala

customService mempunyai pelaksanaan antara muka, jadi ia menggunakan proksi dinamik JDK

Atas ialah kandungan terperinci Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan