一个接口,定义一个方法
一个实现类,实现接口的方法
接口动态代理
一个类用来动态代理那个被代理类
final Producer producer =new Producer();
IProducer proxyProducer = (IProducer) Proxy.newProxyInstance(producer.getClass().getClassLoader(),
Producer.class.getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnValue = null;
Float money = (Float) args[0];
if ("saleProducer".equals(method.getName())) {
System.out.println("哈哈哈");
returnValue = method.invoke(producer, money * 0.8f);
}
return returnValue;
}
});
proxyProducer.saleProducer(10000f);
}
子类动态代理:不使用接口
Producer producer = new Producer();
Producer producerProxy = (Producer) Enhancer.create(Producer.class, new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
Object returnValue = null;
Float money = (Float) objects[0];
if ("saleProducer".equals(method.getName())) {
System.out.println("哈哈哈");
returnValue = method.invoke(producer, money * 0.8f);
}
return returnValue;
}
});
producerProxy.saleProducer(10000f);
}