首页 > 其他 > 详细

2020.05.02 动态代理模式

时间:2020-05-02 23:33:46      阅读:59      评论:0      收藏:0      [点我收藏+]
package com.aojie.Proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
* @author aojie
* @fuction
* @create 2020-05-02 20:26
*/
public class ProxyTest {
public static void main(String[] args) {
//创建对象
Lenovo lenovo = new Lenovo();
//动态代理增强方法
/*
三个参数:
1.类加载器:真实对象.getClass.getClassLoader()
2.接口数组:真实对象.getClass().getInterfaces()
3.处理器:new InvocationHandler()
*/
SaleComputer proxyLenovo =(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("该方法执行了");
/*
1.增强参数
判断是否有参数的方法

*/
if (method.getName().equals("sale")) {
double money = (double)args[0];
money*=0.85;
System.out.println("专车接");
//使用真实对象调用该方法
String invoke = (String)method.invoke(lenovo, money);
System.out.println("免费送货");
//增强返回值

return invoke+"+鼠标垫";
}else{
Object invoke = method.invoke(lenovo, args);
return invoke;
}

}
});
//调用方法
System.out.println(proxyLenovo.sale(8000));
}
}

2020.05.02 动态代理模式

原文:https://www.cnblogs.com/aojie/p/12820036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!