Java中代理的簡明使用
阿新 • • 發佈:2018-08-05
加強 eth return 動態 tcl throws new system ins
代理
首先應該明確兩個概念
代理對象:對訪問目標對象進行攔截的對象
目標對象:實際要訪問的對象
代理的作用
可以用對方法的加強;
動態代理demo
//目標對象 public class Target implements Itarget{ @Override public void test1() { System.out.println("目標對象的test1()"); } }
//代理對象 public class ProxyDemo1 { @Test publicvoid test1(){ //創建動態代理對象 final Target tar=new Target();//在匿名內部類被調用,加final修飾 Itarget newProxyInstance = (Itarget) Proxy.newProxyInstance(tar.getClass().getClassLoader(), //傳遞一個和目標一致的類加載器 tar.getClass().getInterfaces(), //傳遞一個一個Class<?>[] interfacesnew 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中代理的簡明使用