JDK动态代理

1、接口类

public interface UserDAO  {
  public void do(){};
}

2、实现类

public class UserDAOImp implements UserDAO{
    public void do(){
        System.out.println("do userDAO");
    }
}

3、要支入的方法的类

public static class Transaction{

    public void start(){
       System.out.println("Transaction start......");
    }
    public void end(){
      System.out.println("Transaction end......");
    }
}

4、Handler类

public class TransactionHandler implements InvocationHandler {   
    private Object target;   
    public TransactionHandler(Object target) {   
        this.target = target;   
    }   //也可以用getter 和setter方法
    public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {   
        Transaction.start();   
        Object obj = method.invoke(target, args);   
        Transaction.end();   
        return obj;   
    }   
} 

5、调用的类(客户端或者测试类)

import java.lang.reflect.Proxy; 
public class TestDynamicProxy { 
  public static void main(String[] args) { 
    UserDAO target = new UserDAOImp(); 
    Handler handler = new Handler(target);

    /**
    或者 Handler handler = new Handler();
           handler .setHandler(target);
    */
    UserDAO proxy = (UserDAO) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), handler); 
    proxy.do(); 
  } 
} 
原文地址:https://www.cnblogs.com/yangzhilong/p/2998228.html