实现动态代理的步骤 1、创建接口,定义目标类要完成的方法 2、创建目标类实现接口 3、创建InvocationHandler接口的实现了类,在invoke方法中完成代理类的功能 1)调用目标方法 2)增强功能 4、使用Proxy类的静态方法, 创建代理对象,并把返回值转为接口类型 //1、创建接口,定义目标类要完成的方法 public interface UsbSell { float sell(int amount); } //2、创建目标类实现接口 public class FactoryImpl implements UsbSell { @Override public float sell(int amount) { return 75.0f * amount; } } //3、创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能 //必须实现invocationHandler public class MySellHandler implements InvocationHandler { private Object target = null; //对象是活动的,不是固定的,需要传入进来 //传入的是谁就给谁创建代理 public MySellHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(target,args); float price = (float)method.invoke(target,args); return price; } } //4、使用Proxy类的静态方法, 创建代理对象,并把返回值转为接口类型 public static void main(String[] args) { UsbSell usbSell = new FactoryImpl(); InvocationHandler handler = new MySellHandler(usbSell); UsbSell proxy =(UsbSell)Proxy.newProxyInstance(usbSell.getClass().getClassLoader(), usbSell.getClass().getInterfaces(),handler); System.out.println(proxy.sell(5)); }