//创建真实对象
ComputerImpl computer = new ComputerImpl();
//创建代理对象
Computer proxy_computer =(Computer)Proxy.newProxyInstance(computer.getClass().getClassLoader(),
computer.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
//如果方法名等于想要加强的方法就对方法进行加强
if ("saleComputer".equals(method.getName())) {
//从args参数数组中获取要修改的参数并修改
double money = (double) args[0] * 1.1;
//用反射的方式执行方法
String s = (String) method.invoke(computer, money);
return s;
//如果不是要修改的方法,就按原参数执行
} else {
Object obj = method.invoke(computer, args);
System.out.println(obj);
return obj;
}
}
});
//用代理对象调用方法
System.out.println(proxy_computer.saleComputer(5000));
// System.out.println(proxy_computer.show() == null);
proxy_computer.show();
//用真是对象调用方法
System.out.println(computer.saleComputer(5000));
computer.show();
//另,getParameterMap()得到的map是被锁定的,不能更改里面的值,如果用proxy要更改,需另new一个map |
|