动态代理模式: 作用:在不改变源码的情况下,对现有的方法进行增强。 代码演示; 1.一个接口: public interface Printer { void print(); } 2.一个实现类:被增强类 public class PrinterImpl implements Printer { public void print(){ System.out.println("打印机打印。。。"); } } 3.目标代理类:实现InvocationHandler接口 public class TargetProxy implements InvocationHandler { //被代理的对象 private Object targetObject; /** * * ClassLoader loader, 被代理类的类加载器 * Class<?>[] interfaces, 被代理类的所有接口 * InvocationHandler h 实现了InvocationHandler的类 */ public Object newProxyInstance(Object targetObject){ this.targetObject=targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); //真正的代理类 } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("日志记录"); // obj: 调用方法的对象 // args: 方法的参数 method.invoke(targetObject, args); System.out.println("日志保存"); return null; } } 4.测试 public class ProxyTest { public static void main(String[] args) { TargetProxy targetProxy = new TargetProxy(); Printer printer = (Printer)targetProxy.newProxyInstance(new PrinterImpl()); printer.print(); } }