当前位置: 首页 > news >正文

上海做一个公司网站多少钱浙江建设职业技术学院门户网站

上海做一个公司网站多少钱,浙江建设职业技术学院门户网站,cad如何做图纸模板下载网站,网站添加后台上一篇:设计模式8:代理模式-静态代理 目录 如何理解“动态”这两个字?动态代理简单的代码实例一个InvocationHandler代理多个接口有动态代理,为什么还要用Cglib代理? 如何理解“动态”这两个字? “动态”…

上一篇:设计模式8:代理模式-静态代理

目录

  • 如何理解“动态”这两个字?
  • 动态代理简单的代码实例
  • 一个InvocationHandler代理多个接口
  • 有动态代理,为什么还要用Cglib代理?

如何理解“动态”这两个字?

“动态”的含义是代码生成代理类,一个代理类可以代理多个接口

动态区别于死板,静态代理中一个代理类只能代理一个接口,其他不同的接口,就需要再手写不同的代理类,这就很死板

动态代理类似于在安卓里面,我们常说的动态申请权限,其实就是用java或kotlin代码申请权限,而不是在AndroidManifest.xml文件里面写死一次可以申请一个或多个权限

上一篇:中,StationProxyStarProxy都是我们手写的代理类。动态代理可以自动生成代理类。

动态代理简单的代码实例

动态代理需要jdk中提供的两个类InvocationHandlerProxy,重写InvocationHandler接口实现代理方法,Proxy负责生成代理对象。
上篇文章中“明星代理”的例子,用动态代理实现如下:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;interface IStar {void sing(double money);
}class StarImpl implements IStar {public void sing(double money) {System.out.println("唱歌,收入" + money + "元");}
}class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("请先预约时间");System.out.println("沟通出场费用");double money= (double) args[0];if (money < 100000) {System.out.println("对不起,出场费10w万以内不受理");return null;}System.out.println("经纪人抽取了"+ money * 0.2 + "代理费用");args[0] = money * 0.8;Object result = method.invoke(target, args);System.out.println("演唱完毕");return result;}
}public class DynamicProxyExample {public static void main(String[] args) {//原始对象IStar mStar = new StarImpl();InvocationHandler handler = new MyInvocationHandler(mStar);//代理对象IStar proxyHello = (IStar) Proxy.newProxyInstance(mStar.getClass().getClassLoader(),mStar.getClass().getInterfaces(),handler);proxyHello.sing(200000);}
}

运行结果:

请先预约时间
沟通出场费用
经纪人抽取了40000.0代理费用
唱歌,收入160000.0元
演唱完毕

一个InvocationHandler代理多个接口

动态代理的核心优势就在于,一个代理类,可以代理多个接口。如下,演示的是一个代理handler,同时代理两个接口InterfaceA和InterfaceB:

package dynamic_proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;interface InterfaceA {void methodA();
}interface InterfaceB {void methodB();
}class ClassA implements InterfaceA {public void methodA() {System.out.println("执行methodA");}
}class ClassB implements InterfaceB {public void methodB() {System.out.println("执行methodB");}
}class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (method.getName().equals("methodA")) {System.out.println("调用methodA之前");Object result = method.invoke(target, args);System.out.println("调用methodA之后");return result;} else if (method.getName().equals("methodB")) {System.out.println("调用methodB之前");Object result = method.invoke(target, args);System.out.println("调用methodB之后");return result;} else {throw new UnsupportedOperationException("Unsupported method: " + method.getName());}}
}public class DynamicProxyExample {public static void main(String[] args) {InvocationHandler handlerA = new MyInvocationHandler(new ClassA());InterfaceA proxyA = (InterfaceA) Proxy.newProxyInstance(handlerA.getClass().getClassLoader(),new Class[]{InterfaceA.class},handlerA);proxyA.methodA();InvocationHandler handlerB = new MyInvocationHandler(new ClassB());InterfaceB proxyB = (InterfaceB) Proxy.newProxyInstance(handlerB.getClass().getClassLoader(),new Class[]{InterfaceB.class},handlerB);proxyB.methodB();}
}

代码执行结果:

调用methodA之前
执行methodA
调用methodA之后
调用methodB之前
执行methodB
调用methodB之后

动态代理大揭秘,带你彻底弄清楚动态代理!

有动态代理,为什么还要用Cglib代理?

动态代理只能把代理对象,赋值给接口,如上面的例子。不能把代理对象直接赋值一个普通类。而Cglib代理可以做到。具体怎么做的,下篇文章再讲。

http://www.yayakq.cn/news/954205/

相关文章:

  • 婴贝儿网站建设做网上竞彩网站合法吗
  • 专业外贸网站制作价格泉州做网站工资
  • 江北网站制作手机租赁 网站开发
  • 网页跟网站的区别wordpress如何设计首页文章显示
  • 做采集网站难不vue 做电商网站
  • 服饰网站新闻建设鹿泉手机网站建设
  • 网站锚点怎么用网站建设需要租赁服务器吗
  • 上海企业网站模板建站费用珠海关键词优化软件
  • 网站建设满意度问卷调查沾益县住房和城乡建设局网站
  • 门户网站建设项目招标帮人做传销网站违法吗
  • 做网站软件的公司建筑规范app
  • php企业公司网站源码jsp做的网站难吗
  • 自己的网站在哪做的忘了最能打动顾客的十句话
  • 湛江建站网络公司免费拿货的代理商
  • lamp 做网站中装建设装饰有限公司
  • 旅游网站管理系统用第三方做网站
  • 深圳建设工程项目网站中国建设人才信息网站官网
  • 网站icp备案系统下载seo网络营销的技术
  • 怎么在搜索引擎里做网站网页wordpress多重分类
  • 广州建设网站精准客户电话号码购买
  • 常州做网站咨询河北建设工程信息网下载时间
  • 局域网内部网站建设app下载关于申请建设门户网站的
  • 茂南网站开发公司网站安装环境配置
  • 电子商务网站建设与维护读书报告网站技术规划
  • 电子商务网站的设计与实现教育机构报名
  • 建站宝盒自助建站系统赣州管理中心网站
  • cms网站开发框架网页设计师的认识
  • 提供网站建设找哪家公司好网上书店网站建设方案策划
  • 购物网站模板站国外html5特效网站
  • 做网站客户要先看效果后付款网站开发架构