spring 動態代理
阿新 • • 發佈:2020-07-19
一、過程
1、介面類
2、普通類繼承介面
3、ProxyInvocationHandler.java(固定格式)
4、應用類
二、案例
public interface User { void add(); void delete(); void update(); void query(); }
public class UserImpl implements User { public void add() { System.out.println("增加一條資料"); } public void delete() { System.out.println("刪除一條資料"); } public void update() { System.out.println("更新一條資料"); } public void query() { System.out.println("查詢一條資料"); } }
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyInvocationHandler implementsInvocationHandler { // 被代理的介面 private Object target; public void setTarget(Object target) { this.target = target; } // 生成得到代理類 public Object getProxy(){ return Proxy.newProxyInstance( this.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } // 處理代理例項, 並返回結果 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 新增方法 log(method.getName()); Object result = method.invoke(target, args); return result; } public void log(String msg){ System.out.println("[debug]:" + msg); } }
public class client { public static void main(String[] args) { // 真實角色 UserImpl userImpl = new UserImpl(); // 代理角色,不存在 ProxyInvocationHandler pih = new ProxyInvocationHandler(); // 設定要代理的物件 pih.setTarget(userImpl); // 介面類 User user = (User) pih.getProxy(); user.add(); } }