簡單理解動態代理
動態代理
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:實參!
----------------------------
目標對象:被增強的對象
代理對象:需要目標對象,然後在目標對象上添加了增強後的對象!
目標方法:增強的內容
代理對象 = 目標對象 + 增強
簡單理解動態代理