1. 程式人生 > 實用技巧 >spring 動態代理

spring 動態代理

一、過程

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 implements
InvocationHandler { // 被代理的介面 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();
    }
}