ICommodity接口
public interface ICommodity {
int commodityPrice(String size);
}
ICommodity实现类Commodity
动态代理就是在不改变该实现类的情况下增强该实现类的功能
public class Commodity implements ICommodity{
@Override
public int commodityPrice(String size) {
System.out.println("this commodity size is " + size);
return 50;
}
}
CommondityDiscountProxy动态代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class CommodityDiscountProxy {
@SuppressWarnings("unchecked")
public static <T> T getProxy(final int discountCoupon,
final Class<?> interfaceClass, final Class<?> implementsClass)
throws Exception {
return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(),
new Class[] { interfaceClass }, new InvocationHandler() {
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
Integer returnValue = (Integer) method.invoke(
implementsClass.newInstance(), args);// 调用原始对象以后返回的值
return returnValue - discountCoupon;
}
});
}
}
测试类
import org.junit.Test;
public class CommodityDiscountTest {
@Test
public void getPrice() throws Exception{
ICommodity commodity = CommodityDiscountProxy.getProxy(10, ICommodity.class, Commodity.class);
int commodityPrice = commodity.commodityPrice("xxl");
System.out.println(commodityPrice);
}
}