標籤:oca voc style 邏輯 invoke final 調用 dem nts
代理
首先應該明確兩個概念
代理對象:對訪問目標對象進行攔截的對象
目標對象:實際要訪問的對象
代理的作用
可以用對方法的加強;
動態代理demo
//目標對象public class Target implements Itarget{@Overridepublic void test1() {System.out.println("目標對象的test1()");}}
//代理對象public class ProxyDemo1 { @Test public void test1(){ //建立動態代理對象 final Target tar=new Target();//在匿名內部類被調用,加final修飾 Itarget newProxyInstance = (Itarget) Proxy.newProxyInstance(tar.getClass().getClassLoader(), //傳遞一個和目標一致的類載入器 tar.getClass().getInterfaces(), //傳遞一個一個Class<?>[] interfaces new InvocationHandler() {//使用匿名內部類實現介面InvocationHandler @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("調用目標方法前的邏輯"); Object invoke = method.invoke(tar, args); System.out.println("調用目標方法前的邏輯"); return invoke; } } ); newProxyInstance.test1();//實際調用了InvocationHandler下的invoke }}
//執行結果
調用目標方法前的邏輯目標對象的test1()調用目標方法前的邏輯
注意:jdk的Proxy方式實現的動態代理目標對象必須有介面,沒有介面不能實現jdk
版本的動態代理.
Java中代理的簡明使用