Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Anwendung des dynamischen Proxys in Java

Detaillierte Erläuterung der Anwendung des dynamischen Proxys in Java

黄舟
黄舟Original
2017-09-14 10:44:541314Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen vorgestellt, die die Implementierung und Anwendung des dynamischen Java-Proxys im Detail erläutern. Ich hoffe, dass jeder, der dies benötigt, die Verwendung des dynamischen Java-Proxys verstehen und beherrschen kann

Detaillierte Erläuterung der Implementierung und Anwendung des dynamischen Java-Proxys

Der dynamische Java-Proxy wird nicht häufig zum Schreiben von täglichem Geschäftscode verwendet, die Verwendung von RPC ist jedoch sehr häufig und wichtig Framework-Client auf der Framework-Ebene. Die Kernidee von Spring und die Implementierung der zugrunde liegenden Prinzipien von AOP verwenden die dynamische Proxy-Technologie von Java.

Durch die Verwendung eines Proxys können Remote-Aufrufe von Objekten und die Implementierung von AOP realisiert werden.

Die Implementierung des dynamischen Proxys von Java basiert hauptsächlich auf InvoctionHandler (Schnittstelle) und Proxy (Klasse).

Das Folgende ist ein Beispiel

Der implementierte Proxy benötigt im Allgemeinen eine Schnittstelle


package com.yasin.ProxyLearn;

public interface IStudy {

  public void learn();

  public String getKonwledge();

}

Die Implementierung dieser Schnittstelle Die Klasse


package com.yasin.ProxyLearn;

public class Study implements IStudy{

  public void learn() {
    System.out.println("我要开始学习了!");
  }

  public String getKonwledge() {

    return "Java真的强";
  }

}

Proxy-Klasse muss die InvacationHandler-Schnittstelle


package com.yasin.ProxyLearn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class StudyProxy implements InvocationHandler{

  //真实要被代理的对象
  private Object study;

  public StudyProxy(Object study){
    this.study=study;
  }

  /**
   * 当被代理对象执行自己的方法时,便会执行这个方法
   */
  public Object invoke(Object object, Method method, Object[] args) throws Throwable {

    Object obj=null;

    System.out.println("代理执行前我可以执行一些操作");

    //执行被代理对象的方法
    obj = method.invoke(study, args);


    System.out.println("代理执行后我还可以执行一些操作");

    return obj;
  }

}

Testklasse


package com.yasin.JavaLearn;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

import com.yasin.ProxyLearn.IStudy;
import com.yasin.ProxyLearn.Study;
import com.yasin.ProxyLearn.StudyProxy;

/**
 * Hello world!
 *
 */
public class App {

  public static void main(String[] args) {

    IStudy study = new Study();

    InvocationHandler handler = new StudyProxy(study);

    IStudy proxyStudy =(IStudy)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {IStudy.class}, handler);

    proxyStudy.learn();

    System.out.println(proxyStudy.getKonwledge());

  }
}
Das Obige ist die grundlegende Verwendung des dynamischen Java-Proxys. Die Implementierung von Spring AOP und RPC-Remoteserver ist komplizierter und wird später ausführlicher besprochen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Anwendung des dynamischen Proxys in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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