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!