2018-06-19 java 动态代理简单使用

2018-06-19  本文已影响0人  江江江123

使用方法:在不改变原有业务逻辑的基础上,对特殊情况进行修改

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();
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读