代理模式二(JDK動態代理)
阿新 • • 發佈:2019-02-17
動態代理是指,程式在整個執行過程中根本就不存在目標類的代理類,目標物件的代理物件只是由代理生成工具(如代理工廠類)
在程式執行時由 JVM 根據反射等機制動態生成的。代理物件與目標物件的代理關係在程式執行時才確立。
下面直接給出案例
業務介面
package com.demo;
public interface IAccountService {
public void transfer(); //主業務邏輯:轉賬
}
目標類業務增強程式碼package com.demo; public class AccountServiceImpl implements IAccountService { public void transfer() { //目標方法 System.out.println("呼叫Dao層,完成轉賬主業務"); } }
測試程式碼package com.demo; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyExtension implements InvocationHandler{ private Object target; public MyExtension() { } public MyExtension(Object target) { this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("對轉賬進行身份驗證");//增強主業務邏輯程式碼 return method.invoke(target, args); } }
package com.demo; import java.lang.reflect.Proxy; public class Client { public static void main(String[] args) { IAccountService target = new AccountServiceImpl(); IAccountService proxy = (IAccountService) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new MyExtension()); proxy.transfer(); } }