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

优质手机网站建设/网站推广多少钱

优质手机网站建设,网站推广多少钱,广元疫情最新情况,网站从建设到运行要多少钱2019独角兽企业重金招聘Python工程师标准>>> 动态代理的用途: 动态代理的用途与装饰模式很相似,就是为了对某个对象进行增强。所有使用装饰者模式的案例都可以使用动态代理来替换,动态代理可以更好的解耦合 增强有3个手段1. 继承 被增强对象不能变 增强内…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

动态代理的用途:

动态代理的用途与装饰模式很相似,就是为了对某个对象进行增强。所有使用装饰者模式的案例都可以使用动态代理来替换,动态代理可以更好的解耦合

增强有3个手段
1. 继承
 被增强对象不能变
 增强内容不能变
2. 装饰者模式
 被增强对象可变
 但增强内容不能变
3. 动态代理
 被增强对象可变
 增强内容也可变

如何实现动态代理?

定义一个接口Interface, 被增强的对象的类都会实现这个接口

 public interface Interface {public void fun();
}

实现这个Interface接口:
而这个InterfaceImpl就是动态代理中被增强的内容

 public class InterfaceImpl implements Interface {@Overridepublic void fun() {System.out.println("目标方法调用");}
}

定义一个接口Advice, 增强内容的类都会实现这个接口
这个接口有两个未实现的方法:
before()前置增强的方法
after()后置增强的方法

 public interface Advice {public void before();public void after();
}

而实现了Advice接口的对象就是动态代理中增强内容

JavaAPI:

java.lang.reflect.Proxy

Object proxyObject = Proxy.newProxyInstance(ClassLoader classLoader, Class[] interfaces, InvocationHandler h);

返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序

参数:
classLoader - 定义代理类的类加载器
interfaces - 代理类要实现的接口列表
h - 指派方法调用的调用处理程序
返回:
一个带有代理类的指定调用处理程序的代理实例,它由指定的类加载器定义,并实现指定的接口


java.lang.reflect.InvocationHandler

public Object invoke(Object proxy, Method method, Object[] args);

这个invoke()方法在调用代理对象所实现接口中的方法时调用

* Object proxy:当前对象,即代理对象!在调用谁的方法!
* Method method:当前被调用的方法(目标方法)
* Object[] args:目标方法参数

调用proxy实例的方法时, 都会被InvocationHandler所捕获, 因此只要实现InvocationHandler实现类的invoke()方法, 就可以实现目标方法的增强

定义一个类ProxyFactory

该类通过两个参数的public ProxyFactory(target,advice)构造方法构造ProxyFactory实例, 然后通过该实例的getProxy()方法得到代理对象

 public class ProxyFactory {private Object target;    // 目标对象private Advice advice;    // 增强对象public ProxyFactory(Object target, Advice advice) {this.target = target;this.advice = advice;}/*** 得到代理对象*/public Object getProxy() {return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 执行前置增强advice.before();// 执行目标对象的目标方法, 用result接收返回值Object result = method.invoke(target, args);// 执行后置增强advice.after();// 返回目标方法的返回值resultreturn result;}});}
}

测试动态代理

public static void main(String[] args) {InterfaceImpl target = new InterfaceImpl();// 实现一个Advice的实例对象, 这个对象就是动态代理中增强内容Advice advice = new Advice() {@Overridepublic void before() {System.out.println("目标方法调用之前, 执行前置增强");}@Overridepublic void after() {System.out.println("目标方法调用之后, 执行后置增强");}};ProxyFactory proxyFactory = new ProxyFactory(target, advice);Interface proxy = (Interface) proxyFactory.getProxy();proxy.fun();
}

Console输出:

方法调用之前, 执行前置增强
目标方法调用
方法调用之后, 执行后置增强

转载于:https://my.oschina.net/u/2503731/blog/659708

http://www.lbrq.cn/news/1246447.html

相关文章:

  • 如何让别人看到自己做的网站/怎么创建一个网址
  • 网站建设 推广 公司/镇江网站建设
  • 网站开发藏汉双语/百度搜索推广采取
  • 网站建设与制作企业/如何注册域名及网站
  • 做网站哪个平台好/朋友圈产品推广文案
  • 网站没有流量怎么回事/英文seo兼职
  • 长春网站建设网站源码/网络销售技巧和话术
  • 企业网站排名技巧/山东工艺美术学院网站建设公司
  • 如何做淘宝客网站/培训机构排名前十
  • vs2008做网站教程/推广产品
  • 玻璃钢产品哪个网站做推广好/贵阳百度seo点击软件
  • 个人主页网站模板/如何创建一个app
  • 安徽鹏华建设工程有限公司网站/qq群推广方法
  • .net 做手机网站吗/湖南网站seo公司
  • 安卓盒子做网站/做关键词优化的公司
  • 济南商城网站建设公司/网页制作软件手机版
  • 电子商务型网站/网络营销的三大核心
  • ks刷粉网站推广马上刷/安徽网络推广和优化
  • 润东电子科技 网站建设/济南网站建设哪家便宜
  • 网站注册用户推广/百度指数免费查询
  • wordpress测试/seo技术是干什么的
  • 深圳住房和建设局网站无法登陆/黑龙江新闻
  • asp技校网站/化妆品软文推广范文
  • 成都企业网站建设及公司ppt/宁波seo外包推广渠道
  • 德州公司做网站/关键词排名监控批量查询
  • 网站能不能用自己的电脑做服务器/网站快速收录入口
  • 朱能源做网站/百度seo怎么把关键词优化上去
  • 公司网站开发 flask/百度博客收录提交入口
  • 做网站解析要多久/今日足球比赛分析推荐
  • 做正规网站有哪些/培训学校招生方案范文
  • 小杰数据结构(four day)——藏器于身,待时而动。
  • BIFU币富探索合规新路径 助力用户玩转RWA
  • Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)
  • 安装 docker compose v2版 笔记250731
  • 02 基于sklearn的机械学习-KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)、决策树(信息增益、基尼指数)、随机森林
  • MacTex+Vscode数学建模排版