Maison  >  Article  >  Java  >  Explication détaillée de l'application du proxy dynamique en Java

Explication détaillée de l'application du proxy dynamique en Java

黄舟
黄舟original
2017-09-14 10:44:541267parcourir

Cet article présente principalement des informations pertinentes qui expliquent en détail la mise en œuvre et l'application du proxy dynamique Java. J'espère qu'à travers cet article, tout le monde pourra comprendre et maîtriser l'utilisation du proxy dynamique Java. Les amis dans le besoin pourront se référer à

.

Explication détaillée de la mise en œuvre et de l'application du proxy dynamique Java

Le proxy dynamique Java n'est pas couramment utilisé pour écrire du code métier quotidien, mais il est très courant et important d'utiliser le RPC client framework au niveau de la couche framework. L'idée centrale de Spring et la mise en œuvre des principes sous-jacents d'aop utilisent la technologie de proxy dynamique de Java.

L'utilisation d'un proxy peut réaliser des appels d'objets à distance et la mise en œuvre d'aop.

L'implémentation du proxy dynamique de Java repose principalement sur InvoctionHandler (interface) et Proxy (classe).

Ce qui suit est un exemple

Le proxy implémenté a généralement besoin d'une interface


package com.yasin.ProxyLearn;

public interface IStudy {

  public void learn();

  public String getKonwledge();

}

La mise en œuvre de cette interface La classe


package com.yasin.ProxyLearn;

public class Study implements IStudy{

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

  public String getKonwledge() {

    return "Java真的强";
  }

}

classe proxy doit implémenter l'interface InvacationHandler


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

}

Classe de test


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

  }
}

Ce qui précède est l'utilisation de base du proxy dynamique Java. L'implémentation de spring aop et du serveur distant rpc est plus compliquée que cela, qui sera discuté en profondeur plus tard.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn