Heim > Java > javaLernprogramm > Was ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?

Was ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?

王林
Freigeben: 2023-05-10 15:52:18
nach vorne
3189 Leute haben es durchsucht

1. Springboot 2.x und höher

Cglib wird standardmäßig in SpringBoot 2.x AOP verwendet, aber der dynamische JDK-Proxy wird in Spring5 weiterhin standardmäßig verwendet. Spring AOP verwendet standardmäßig den dynamischen JDK-Proxy. Wenn das Objekt die Schnittstelle nicht implementiert, wird der CGLIB-Proxy verwendet. Natürlich ist es auch möglich, die Verwendung eines CGLIB-Proxys zu erzwingen.

In SpringBoot wird AOP automatisch über AopAutoConfiguration zusammengestellt.

Was ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?

2. Springboot 1.x

Springboot 1.x AOP verwendet standardmäßig immer noch den dynamischen JDK-Proxy

Was ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?

3.SpringBoot 2.x Warum Wird Cglib standardmäßig verwendet? Da der dynamische JDK-Proxy auf Schnittstellen basiert, können die vom Proxy generierten Objekte nur Schnittstellenvariablen zugewiesen werden. Der dynamische JDK-Proxy verwendet Proxy.newProxyInstance(), um eine Proxy-Implementierungsklasse zu erstellen. Der zweite Parameter erfordert jedoch einen Schnittstellentyp. Wenn kein Schnittstellentyp vorhanden ist, wird ein Fehler gemeldet.

Proxy.newProxyInstance(iCustomerInstance.getClass().getClassLoader(), iCustomerInstance.getClass().getInterfaces(), this);
Nach dem Login kopieren

CGLIB hat dieses Problem nicht. Da CGLIB durch Generieren von Unterklassen implementiert wird, sind beide unabhängig davon, ob das Proxy-Objekt einer Schnittstelle oder einer Implementierungsklasse zugewiesen ist, die übergeordnete Klasse des Proxy-Objekts.

In Version 2.x und höher wird die Standardimplementierung von AOP in CGLIB-Proxy geändert.

Erstellen Sie eine neue Schnittstelle.

public interface ICustomService {
    void printf();
}
Nach dem Login kopieren

Erstellen Sie eine neue Implementierungsklasse von ICustomService.

@Service
public class CustomServiceImpl implements ICustomService {
 
    public void printf() {
 
    }
}
Nach dem Login kopieren
.

Fügen Sie eine weitere Klasse hinzu, die keine Schnittstelle implementiert

Dann stellen wir den Proxy über die application.properties-Konfiguration standardmäßig auf den JDK-Proxy ein.

@Service
public class CustomNoImpl {
 
    public void hello() {
        
    }
}
Nach dem Login kopieren

Dann habe ich mit dem Debuggen begonnen und festgestellt, dass CustomNoImpl den von CGLIB generierten Proxy verwendet, weil es die Schnittstelle nicht implementiert, während Was ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?

customService über eine Schnittstellenimplementierung verfügt und daher den dynamischen Proxy von JDK verwendet

Das obige ist der detaillierte Inhalt vonWas ist die standardmäßige dynamische Proxy-Methode von SpringBoot/Spring AOP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage