package com.ljn.base;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author lijinnan
* @date:2014-5-26
*/
public class ChangeReturnValue {
/**
* @param args
*/
public static void main(String[] args) {
IOrder order = new Order(1);
System.out.println(order.getPrice());
IOrder proxyOrder = ProxyOrder.getProxyOrder(order);
System.out.println(proxyOrder.getPrice());
}
static class ProxyOrder {
public static IOrder getProxyOrder(final IOrder order) {
IOrder iOrder = (IOrder) Proxy.newProxyInstance(order.getClass().getClassLoader(),
order.getClass().getInterfaces(),
new InvocationHandler (){
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("getPrice")) {
return 2;
}
return method.invoke(order, args);
}
});
return iOrder;
}
}
static interface IOrder {
int getPrice();
}
static class Order implements IOrder {
private int price;
public Order(int price) {
this.price = price;
}
@Override
public int getPrice() {
return price;
}
}
}
2014年5月26日 15:01