Heim > Java > javaLernprogramm > Einführung in die Implementierungsmethoden des dynamischen JAVA-Proxys und des CGLIB-Modus (Codebeispiel)

Einführung in die Implementierungsmethoden des dynamischen JAVA-Proxys und des CGLIB-Modus (Codebeispiel)

不言
Freigeben: 2019-03-19 10:29:58
nach vorne
2909 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Implementierungsmethoden des JAVA-Dynamik-Proxys und des CGLIB-Modus (ich hoffe, er hat einen gewissen Referenzwert). Es wird Ihnen helfen.

Dynamischer Proxy ist eine Technologie, die Reflexions- und Bytecode-Technologie verwendet, um zur Laufzeit eine Unterklasse einer bestimmten Schnittstelle oder Klasse (dynamischer Proxy) und ihres Instanzobjekts zu erstellen. Durch diese Technologie kann Code nicht-invasiv verbessert werden ( Empfohlen: Java-Tutorial)

Einführung in die Implementierungsmethoden des dynamischen JAVA-Proxys und des CGLIB-Modus (Codebeispiel)

Proxy: Proxy ist die übergeordnete Klasse aller dynamischen Proxys, die eine statische Methode zum Erstellen dynamischer Proxy-Klassenobjekte bereitstellt und Instanzen;
InvocationHandler: Jeder dynamischen Proxy-Instanz ist ein InvocationHandler zugeordnet. Wenn eine Methode auf einer Proxy-Instanz aufgerufen wird, wird der Methodenaufruf an die Aufrufmethode von InvocationHandler

1.java dynamische Proxy-Implementierung

//java的代理模式必须有一个interface的接口方法
public interface ItemService {
    void sayHello();
}

public class ItemServiceImpl implements ItemService {
    @Override
    public void sayHello() {
        System.out.println("hello world~");
    }
}

//代理类 
public class MyInvocationHandler implements InvocationHandler {

    private Object realObject;

    public void setRealObject(Object realObject) {
        this.realObject = realObject;
    }

    public Object getRealObject() {
        return realObject;
    }

    public MyInvocationHandler(Object realObject){
        super();
        this.realObject=realObject;
    }


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before running ~~");
        Object ret=method.invoke(realObject,args);
        System.out.println("after running ~~~");
        return ret;
    }
}

// 实现类
public class main {
    public static void main(String[] args) {
        ItemService itemService=new ItemServiceImpl();
        MyInvocationHandler handler=new MyInvocationHandler(itemService);
        ItemService proxy= (ItemService) Proxy.newProxyInstance(itemService.getClass().getClassLoader(),itemService.getClass().getInterfaces(),handler);
        proxy.sayHello();
    }
}
Nach dem Login kopieren

2.CGLIB-Implementierung

CGLIB (Code Generation Library) ist eine ASM-basierte Bytecode-Generierungsbibliothek, die es uns ermöglicht, Bytecode zur Laufzeit zu ändern und dynamisch zu generieren. CGLIB implementiert Proxy durch Vererbung;

Enhancer: um das Zielobjekt anzugeben, das tatsächlich die Proxy-Logik verarbeitet, wird das Proxy-Objekt durch Aufrufen aller nicht endgültigen Methodenaufrufe abgerufen Dieses Objekt wird an MethodInterceptor weitergeleitet Java erfordert keine externen Abhängigkeiten, kann jedoch nur auf Schnittstellen basierende Proxys erstellen. CGLIB-Proxys werden durch Vererbung bereitgestellt. Unabhängig davon, ob das Zielobjekt die Schnittstelle implementiert oder nicht, kann es Proxys erstellen, die endgültige Situation jedoch nicht verarbeiten


Das obige ist der detaillierte Inhalt vonEinführung in die Implementierungsmethoden des dynamischen JAVA-Proxys und des CGLIB-Modus (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.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