java动态代理

增强对象的功能:
设计模式:一些通用的解决固定问题的方式
1 装饰模式
2 代理模式:
概念:
1 真实对象:被代理的对象
2 代理对象:
3 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的。
实现方式:
1 静态代理:有一个类文件描述代理模式
2 动态代理:在内存中形成代理类。
实现步骤:
1 代理对象和真实对象实现相同的接口
2 代理对象=Proxy.newInstance();
3 使用代理对象调用方法。
4 增强方法。

动态代理增强真实对象
Proxy.newProxyInstance();
三个参数:
1 类加载器,真实对象.getClass().getClassLoader()
2 接口数组,真实对象.getClass().getInterfaces()
3 处理器 new InvocationHandler().
Proxy.newProxyinstance()该方法返回一个代理对象。
例如:Object proxy=Proxy.newProxyInstance(lenove.getClass().getClassLoader(),lenovo.getClass().getInterfaces(),new InvocationHandler(){
/*invoke方法:代理逻辑编写的方法,代理对象调用的所有方法都会触发该方法执行。
*/
@Override
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{

re
}

})
invoke()方法的解析:
代理逻辑编写的方法:代理对象调用的所有方法都会触发该方法执行
参数:
1 proxy:代理对象
2 method:代理对象调用的方法,被封装为的对象
3 args:代理对面调用的方法时,传递的实际参数。
代理逻辑代码的编写:
例如:
使用真实对象调用该方法,//该方法返回的正是真实对象所返回的。
Object obj=method.invoke(“真实对象”,“实际参数–args”);
return obj;
增强的方式:
1 增强参数列表
2 增强返回值类型
3 增强方法体执行逻辑
1 增强参数:
//需求:如果代理类调用sale方法,那么就给参数列表的money0.85;然后再把money传给真实对象,例如:method.invoke(lenove,args);
例如:
//判断是否是sale方法
if(method.getName().equals(“sale”)){
//1增强参数:
double money=(double)args[0];
money=money
0.85;
System.out.print("转车接你…’);//增强方法体,前置
//使用真实对象调用该方法
Object obj=method.invoke(lenovo,money);
System.out.print(“免费送你…”);//增强方法体,后置通知。
retrun obj;
}else{//如果不是调用sale那么就传没有增强的参数。
Object obj=method.invoke(lenovo,args);

增强返回值:
例如:
retrun obj+“鼠标垫”;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_43557743

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值