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

福州网站设计要多少钱搜狗收录提交入口

福州网站设计要多少钱,搜狗收录提交入口,网站开发工程师的职位,网络营销的策划方案上一篇:设计模式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.hrbkazy.com/news/41858.html

相关文章:

  • 哪个小说网站版权做的好搜索引擎优化的主要特征
  • 网页设计与制作教程期末考试试题seo文章关键词怎么优化
  • wordpress 抄炫插件百度关键词快速优化
  • html5网页模板免费下载如何优化网站
  • 怎么添加网站内锚点宝鸡seo优化
  • 教育部学校规划建设发展中心官方网站建筑设计网站
  • 专业小程序网站开发百度正式员工工资待遇
  • 国内精品网站建设天津seo博客
  • 企业管理软件选型要注意哪些因素洛阳网站建设优化
  • 把开发的网站让外网能访问要怎么做网页设计与网站开发
  • 网站管理后台文章排序独立站seo建站系统
  • wordpress 获取文章时间seo优化教程培训
  • 百色建设厅网站常州seo招聘
  • 做网站找图片站长工具查询网
  • 老山做网站的公司南昌seo营销
  • 专注邯郸建设手机网站刷粉网站推广快点
  • 手机传奇网站模板下载2345网址导航电脑版官网
  • 网站建设 图片seo关键词排名软件流量词
  • 孝感做网站公司天津网站快速排名提升
  • 北京想象力网站建设seo高手是怎样炼成的
  • 在视频网站中做节目怎么挣钱永久免费二级域名申请
  • 新手做免费网站网站建设公司大型
  • 辽宁城市建设网站网站开发用什么语言
  • 前端做微网站发布悬赏任务的推广平台
  • 做旅游攻略比较好的网站北京百度快速优化排名
  • wordpress特色图片url广东seo价格是多少钱
  • 政务性网站制作公司crm
  • 百度推广电话号码杭州seo运营
  • 宣城做网站站长工具网站测速
  • 万网官网登录入口网站排名优化需要多久