动态代理

动态代理

使用步骤:
	1.创建接口方法,定义业务函数。
		public interface SaleComputer {
		    public String sale(double money);
		    void show();
		}
	2.实现该接口的方法。
		public class Lenovo implements SaleComputer {
		    @Override
		    public String sale(double money) {
		        System.out.println("花了"+money);
		        return "联想电脑";
		    }
		
		    @Override
		    public void show() {
		        System.out.println("show...");
		    }
		}
	3.在使用动态代理的地方创建真实对象,并调用动态代理对方法进行增强。
		public class ProxyTest {
		    public static void main(String[] args) {
		        //1.创建真实对象
		        Lenovo lenovo = new Lenovo();
		        //2.动态代理增强对象
		        /*
		        三个参数:
		            1.类加载器:真实对象
		            2.接口数组:真实对象
		            3.处理器:
		         */
		        SaleComputer proxy_lenovo = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() {
		            /*
		            代理逻辑编写的方法:代理对象调用的所有方法都会触发该方法执行
		                参数:
		                    1.proxy:代理对象
		                    2.method:代理对象调用的方法,被封装为的对象
		                    3.args:代理对象调用的方法时,传递的实际参数
		             */
		            @Override
		            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		                System.out.println("该方法被执行了。。。");
		                //判断是否是sale方法
		                if (method.getName().equals("sale")){
		                    //1.增强参数
		                    double money = (double)args[0];
		                    money = money*0.85;
		                    //使用真实对象调用该方法
		                    String  obj = (String) method.invoke(lenovo,args);
		                    //2.增强返回值
		
		                    return obj+"_鼠标垫";
		                }else {
		                    Object obj = method.invoke(lenovo,args);
		                    return obj;
		                }
		            }
		        });
		
		        //2.调用方法
		        String computer = proxy_lenovo.sale(8000);
		        System.out.println(computer);
		    }
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值