這篇文章主要介紹了Java 動態代理原理分析的相關資料,希望透過本文能幫助到大家,讓大家掌握動態代理的原理,需要的朋友可以參考下
Java動態代理原理分析
概要
AOP的攔截功能是由java中的動態代理來實現的。說穿了,就是在目標類別的基礎上增加切面邏輯,產生增強的目標類別(該切面邏輯或是在目標類別函數執行之前,或是目標類別函數執行之後,或是在目標類別中拋出例外執行時執行。Spring中的動態代理是使用Cglib進行實現的。
範例需要代理程式的介面
public interface IHello { public void sayHello(); }需要代理程式的類別
public class HelloImpl implements IHello { public void sayHello() { System.out.println(“Hello World…”); } }
呼叫處理器實作類別
public class ProxyHandler implements InvocationHandler { private Object target; public ProxyHandler(Object target) { this.target = target; } public Object proxyInstance() { return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(“aspect before … “); Object result = method.invoke(this.target, args); System.out.println(“aspect after … “); return result; } }
測試類別入口
public class Main { public static void main(String[] args) { ProxyHandler proxy = new ProxyHandler(new HelloImpl()); IHello hello = (IHello) proxy.proxyInstance(); hello.sayHello(); } }
Proxy 原始碼解析
newProxyInstance() 方法
省略了不關心的程式碼
public static Object newProxyInstance(ClassLoader loader, Class c){ }
以上是Java中關於動態代理原理分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!