使用方法:在不改变原有业务逻辑的基础上,对特殊情况进行修改
public class sellAction {
public interface SellService {
Integer sell(Integer money);
}
public static class SellServiceImpl implements SellService {
public Integer sell(Integer money) {
return money;
}
}
public static void main(String[] args) {
try {
//反射使用需要参数 接口和实现类
final SellService sellService = (SellService) Proxy.newProxyInstance(SellService.class.getClassLoader(), new Class[]{SellService.class}, new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//通过动态代理获取原返回值
Integer money = (Integer) method.invoke(SellServiceImpl.class.newInstance(),args);
//根据不同的方法做不同的处理
if ("sell".equals(method.getName())){
return money-5;
}
return money;
}
});
//使用新的ServiceImpl,而不改动原ServiceImpl
final Integer newSell = sellService.sell(10);
System.out.println(newSell);
}catch (Exception e){
e.printStackTrace();
}
}
}
网友评论