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< 🎜 implementieren >
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 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!