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.
3 Mengapakah SpringBoot 2.x menggunakan Cglib secara lalai
Proxy.newProxyInstance(iCustomerInstance.getClass().getClassLoader(), iCustomerInstance.getClass().getInterfaces(), this);
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(); }
Buat kelas pelaksanaan baharu ICustomService
@Service public class CustomServiceImpl implements ICustomService { public void printf() { } }
Tambah kelas lain yang tidak melaksanakan sebarang antara muka
@Service public class CustomNoImpl { public void hello() { } }
dan kemudian mulakan itu, anda boleh menggunakan ICustomService dan CustomNoImpl melihat bahawa proksi AOP menggunakan proksi dinamik CGLIB
Kemudian kami menetapkan proksi kepada proksi JDK secara lalai melalui konfigurasi application.properties.
spring.aop.proxy-target-class=false
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!