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

Apakah kaedah proksi dinamik lalai bagi SpringBoot/Spring AOP?

王林
王林ke hadapan
2023-05-10 15:52:183097semak imbas

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);

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

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

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam