首頁 >Java >java教程 >Java中關於動態代理原理分析

Java中關於動態代理原理分析

黄舟
黄舟原創
2017-10-16 10:17:491916瀏覽

這篇文章主要介紹了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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn