在java中 java.lang.reflect包下提供了一个proxy类 和 一个 InvocationHandle接口
InvocationHandle 接口 的作用是生成动态代理对象 JDK 提供的代理只能针对接口做代理
proxy 中有一个方法 newProxyInstance() :
这个方法有三个参数: 类加载器 接口 InvocationHandle对象
public interface User { public void add(); public void delete(); }
public class UserImp implements User { @Override public void add() { System.out.println("添加功能"); } @Override public void delete() { System.out.println("删除功能"); } }
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInvocationHandler implements InvocationHandler { private Object target; public MyInvocationHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("账号校验"); // 代理的方法 method.invoke(target, args); // 调用方法 System.out.println("日志记录"); // 代理的方法 return null; } }
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { UserImp ui = new UserImp(); ui.add(); ui.delete(); System.out.println("--------------"); MyInvocationHandler mh = new MyInvocationHandler(ui); // 生成动态代理对象 User u = (User)Proxy.newProxyInstance (ui.getClass().getClassLoader(), ui.getClass().getInterfaces(), mh); // 三个参数 累加载器,接口,动态代理对象 u.add(); //方法执行前后就动态执行 动态代理的方法 u.delete(); } }