美文网首页
2018-06-19 java 动态代理简单使用

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

作者: 江江江123 | 来源:发表于2018-06-19 15:44 被阅读0次

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

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();
        }
    }
}

相关文章

网友评论

      本文标题:2018-06-19 java 动态代理简单使用

      本文链接:https://www.haomeiwen.com/subject/zqbaeftx.html