1. 程式人生 > >簡單理解動態代理

簡單理解動態代理

編程 模式 pro 調用 int 類加載器 obj 類加載 實參

動態代理

1. 只學一個方法
  方法的作用:在運行時,動態創建一組指定的接口的實現類對象!(在運行時,創建實現了指定的一組接口的對象)

interface A {
}

interface B {
}

Object o = 方法(new Class[]{A.class,B.class})
o它實現了A和B兩個接口!


-------------


Object proxyObject = Proxy.newProxyInstance(ClassLoader classLoader, Class[] interfaces, InvocationHandler h);
1. 方法作用:動態創建實現了interfaces數組中所有指定接口的實現類對象!
參數;
1. ClassLoader:類加載器!
* 它是用來加載器的,把.class文件加載到內存,形成Class對象!
2. Class[] interfaces:指定要實現的接口們
3. InvocationHandler:代理對象的所有方法(個別不執行,getClass())都會調用InvocationHandler的invoke()方法。


---------------------------------------------------------

2. 動態代理作用
最終是學習AOP(面向切面編程),它與裝飾者模式有點相似,它比裝飾者模式還要靈活!

----------------------------------------------------------

InvocationHandler

public Object invoke(Object proxy, Method method, Object[] args);

這個invoke()方法在什麽時候被調用!
1. 在代理對象被創建時?錯誤的!
2. 在調用代理對象所實現接口中的方法時?正確的!

* Object proxy:當前對象,即代理對象!在調用誰的方法!
* Method method:當前被調用的方法(目標方法)
* Object[] args:實參!

----------------------------

目標對象:被增強的對象
代理對象:需要目標對象,然後在目標對象上添加了增強後的對象!
目標方法:增強的內容

代理對象 = 目標對象 + 增強

簡單理解動態代理