白话动态代理(附demo)

关联文章:

《java之反射(RPC中应用Demo)》

白话动态代理:

假设有一个service类,可以完成根据客户发送的商品请求,然后service类可以根据商品,返回一个价格给客户。与此同时,还有很多的其他业务也在用这个类。

现在公司来了个新的需求,要给这个类添加打折,现金抵扣的活动,由于其他业务也存在以来于service类,所以我们不能通过修改这个service类,来满足公司的需求 。这个时候我们就要用到动态代理,写一个动态代理的类,去实现原有的服务方法之外,在方法调用之前或者之后,都可以加入一些新业务的逻辑,这样可以很好的满足公司的需求。

Demo:

业务原接口:

public interface IBoss{
    int yifu(String size);
}

原业务实现类:

public class Boss implements IBoss{
    public yifu(String size){
        System.err.println("天猫小强旗舰店,老板给客户发快递----衣服型号:"+size);
//这件衣服的价钱,从数据库读取
        return 50;
    }
    public void kuzi(){
        System.err.println("天猫小强旗舰店,老板给客户发快递----裤子");
    }
}

原业务调用:

public class saleAction{
    @Test
    void saleByBossSelf() throws Exception{
        IBoss boss = new Boss();
        System.out.println("老板自营!");
        Int money = boss.yifu(“xxl”);
        System.out.println("衣服成交价:" + money);
    }
}

代理类:

public static <T> T getProxyBoss(final Class<?> interfaceClass, final Class<?> implementsClass, int discount) throws Exception {
        return (T) Proxy.newInstance(
                interfaceClass.getClassLoader(),
                new Class[]{interfaceClass},
                new InvocationHandler() {
                    public Object invoke(Object obj, Method
                            method, Object[] args) {
                        Integer returnNum = (Integer) method.invoke(implementsClass.newInstance(),
                                args);
                        return returnNum - discount;
                    }
                });
    }

新业务调用:

public class ProxySaleAction{
    pubic void saleByProxy()throws Exception{
        IBoss boss = ProxyBoss.getProxyBoss(10,IBoss.class,Boss.class);
        System.out.println("代理经营!");
        int money = boss.yifu("xxl");
        System.out.println("衣服成交价:" + money);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值