实现动态代理的步骤
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));
}