您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
13_动态代理2_增强方法(invoke的调用与方法入参与方法体和方法出参增强)
发布时间:2022-09-29 21:41:24编辑:雪饮阅读()
上篇了解到invoke,但是你会发现代理虽然执行了我们实际对象的方法,但是好像没有什么效果,这是因为在invoke内部还需要通过method.invoke(对象(当前method所属类的实例),参数)。
实例如:
package package3;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args){
Lenovo lenovo=new Lenovo();
//动态增强对象
SaleComputer proxy_lenovo=(SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("欢迎来到invoke");
String obj=null;
if(method.getName().equals("sale")){
//增强参数(这里你提前要知道参数类型)
double money=(double) args[0];
money=money*0.85;
//增强参数后,则args可以被替代了(这里语法有点小奇怪。。。)
//增强方法体(一般是对原方法多加一些内容)
System.out.println("买电脑前专车接待");
obj=(String)method.invoke(lenovo,money);
System.out.println("买电脑后专车带你回家");
//增强返回值
obj+=",加赠送你苹果手机一部";
//总体来说增强方法入参和返回值(出参)以及方法体,基本上都不算是什么新知识了。。。一眼就看穿了
}
else{
//这里第一个参数是要传递一个当前method所属于的那个类的具象化实例,返回类型前提是我们已经知道了是字符串
obj= (String)method.invoke(lenovo,args);
}
return obj;
}
});
System.out.println("代理对象执行----------");
proxy_lenovo.sale(8000);
System.out.println("真实对象执行----------");
lenovo.sale(8000);
}
}
关键字词:动态代理2,增强方法,invoke
相关文章
-
无相关信息