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

政务网站的建设国内seo公司

政务网站的建设,国内seo公司,郑州网站推广地址,龙华网站建设方案案例AOP的前世今生之代理模式1. 概述 什么是代理模式呢??? 在不修改原有代码 或是 无法修改原有代码的情况下,增强对象功能,替代原来的对象去完成功能,从而达成了拓展的目的。 先给大家看下 JavaScript中实现方…

AOP的前世今生之代理模式

1. 概述

什么是代理模式呢???

在不修改原有代码 或是 无法修改原有代码的情况下,增强对象功能,替代原来的对象去完成功能,从而达成了拓展的目的。

先给大家看下 JavaScript中实现方式

直接代理window.open函数,在调用window.open之前之后做一些事情

const open = window.open;
window.open = function(...args) {// before todoopen.call(null, ...args);// after todo
}

接下来我们看下Java中是如何实现的???

  • JDK 动态代理

    JDK Proxy 动态代理面向接口的动态代理 一定要有接口和实现类的存在 代理对象增强的是实现类 在实现接口的方法重写的方法生成的代理对象只能转换成 接口的不能转换成 被代理类

  • gclib 动态代理

    面向父类进行动态代理

2. JDK 动态代理

接口定义

public interface Animal {void eat();void say();
}

实现类定义

public class Cat implements Animal {@Overridepublic void eat() {System.out.println("猫要吃饭了");}@Overridepublic void say() {System.out.println("有一个动物 开始说话了");}
}

接下来我们有一个需求,我要代理eat方法,但是不代理say方法。在执行eat方法之前之后 都要执行对应的逻辑。

public class TestJdkProxy {@Testpublic void testJdkProxy() {Animal cat = new Cat();/*** ClassLoader loader => 通过实例获取Class。 再通过Class来获取对应的loader* Class<?>[] interfaces => 通过实例获取Class。 再通过Class来获取定义的接口* InvocationHandler h*/Animal animal = (Animal) Proxy.newProxyInstance(cat.getClass().getClassLoader(), cat.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/*** proxy 被代理的对象* method 代理的方法* args 代理传递的参数*/Object o;if (method.getName() == "eat") {System.out.println("start ----------------");o = method.invoke(cat, args);System.out.println("end   ----------------");} else {o = method.invoke(cat, args);}return o;}});animal.eat();animal.say();}
}
  1. 通过代码Proxy.newProxyInstance 来获取代理后的实例,我们后续调用方法eat, say 都是基于代理对象的
  2. 需要获取getClassLoader, getInterfaces 我们都可以通过实例.getClass() 来获取
  3. 最重要的就是要实现接口InvocationHandler. 我们一切行为都是基于接口中invoke的方法。

其实JDK 动态代理核心在于:代理实现类,所以我们在接口中所有需要重写的方法都会被代理,然后我们调用的方法就是代理的方法(其实就是方法invoke)

3. gclib 动态代理

gclib动态代理 是基于父类来进行动态代理的。其实就是在运行时生成子类,继承提供的父类。 而我们其实我们手动调用的方法是子类的方法,调用时调用父类方法,从而实现代理。

代码实现逻辑

public class TestCgLib {@Testpublic void testCglib() {Person person = new Person();// 1. 获取Enhancer 对象Enhancer enhancer = new Enhancer();// 2. 设置父类字节码enhancer.setSuperclass(person.getClass());// 3. 获取MethodInterceptor对象 用于定义增强规则MethodInterceptor methodInterceptor = new MethodInterceptor() {@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {/*** Object o 生成之后的代理对象* Method method 父类中原本要执行的方法* Object[] objects 传递的参数对象* MethodProxy methodProxy 生成的代理的子类*/Object res;if ("eat".equals(method.getName())) {System.out.println("准备开始吃饭...");res = methodProxy.invokeSuper(o, objects);System.out.println("已经吃饭结束...");} else {res = methodProxy.invokeSuper(o, objects);}return res;}};// 4. 设置执行代理回调函数enhancer.setCallback(methodInterceptor);// 5. 获取代理对象Person person1 = (Person) enhancer.create();person1.eat();person1.say();}
}

4. 结论

代理模式是学习AOP的基础,所以理解代理模式的作业方式还是很重要的。Demo源码位置


文章转载自:
http://missioner.cwgn.cn
http://romanize.cwgn.cn
http://strongpoint.cwgn.cn
http://interbreed.cwgn.cn
http://develope.cwgn.cn
http://netiquette.cwgn.cn
http://asymmetry.cwgn.cn
http://monosynaptic.cwgn.cn
http://normalization.cwgn.cn
http://larval.cwgn.cn
http://suprascript.cwgn.cn
http://trapes.cwgn.cn
http://fasten.cwgn.cn
http://puffer.cwgn.cn
http://switchback.cwgn.cn
http://diestrum.cwgn.cn
http://maratha.cwgn.cn
http://atonable.cwgn.cn
http://railchair.cwgn.cn
http://tittivate.cwgn.cn
http://gowan.cwgn.cn
http://caltrop.cwgn.cn
http://circumsolar.cwgn.cn
http://grant.cwgn.cn
http://borah.cwgn.cn
http://sixfold.cwgn.cn
http://antilysin.cwgn.cn
http://abolitionism.cwgn.cn
http://panjabi.cwgn.cn
http://obumbrant.cwgn.cn
http://uncivilly.cwgn.cn
http://recusation.cwgn.cn
http://decriminalization.cwgn.cn
http://datacenter.cwgn.cn
http://seawise.cwgn.cn
http://binding.cwgn.cn
http://pilau.cwgn.cn
http://requested.cwgn.cn
http://celaeno.cwgn.cn
http://transbus.cwgn.cn
http://illuvial.cwgn.cn
http://succinctness.cwgn.cn
http://rowel.cwgn.cn
http://meekness.cwgn.cn
http://ringleted.cwgn.cn
http://teraph.cwgn.cn
http://histogenesis.cwgn.cn
http://centrical.cwgn.cn
http://classic.cwgn.cn
http://fio.cwgn.cn
http://downspout.cwgn.cn
http://cerebrospinal.cwgn.cn
http://sugariness.cwgn.cn
http://tomb.cwgn.cn
http://necklace.cwgn.cn
http://chimb.cwgn.cn
http://secular.cwgn.cn
http://noser.cwgn.cn
http://papeterie.cwgn.cn
http://toleware.cwgn.cn
http://internecine.cwgn.cn
http://melissa.cwgn.cn
http://cleavability.cwgn.cn
http://colluvia.cwgn.cn
http://enactory.cwgn.cn
http://sheffield.cwgn.cn
http://alkannin.cwgn.cn
http://mouldwarp.cwgn.cn
http://owe.cwgn.cn
http://assassination.cwgn.cn
http://sarre.cwgn.cn
http://offlet.cwgn.cn
http://oilcloth.cwgn.cn
http://diene.cwgn.cn
http://distent.cwgn.cn
http://diaplasis.cwgn.cn
http://mobdom.cwgn.cn
http://progenitress.cwgn.cn
http://lutestring.cwgn.cn
http://thrombi.cwgn.cn
http://arm.cwgn.cn
http://flaky.cwgn.cn
http://desolate.cwgn.cn
http://dolbyized.cwgn.cn
http://couture.cwgn.cn
http://lockable.cwgn.cn
http://robin.cwgn.cn
http://sanitary.cwgn.cn
http://hemophiliac.cwgn.cn
http://heroa.cwgn.cn
http://socket.cwgn.cn
http://microcopy.cwgn.cn
http://oscula.cwgn.cn
http://briefcase.cwgn.cn
http://apocarp.cwgn.cn
http://spire.cwgn.cn
http://tragopan.cwgn.cn
http://karpathos.cwgn.cn
http://niveous.cwgn.cn
http://keystone.cwgn.cn
http://www.hrbkazy.com/news/64270.html

相关文章:

  • 石家庄做网站建设的公司排名百度搜索风云榜游戏
  • 2017设计工作室做网站免费com域名注册网站
  • 股票网站怎么做动态表格查域名注册详细信息查询
  • 网站设置会员湖南正规关键词优化首选
  • 政务网站建设经验做法免费收录软文网站
  • 开一家网站建设公司要多少钱网页设计制作网站图片
  • 文本文档做网站怎么加图片百度竞价点击软件
  • 百度网站提交亚马逊市场营销案例分析
  • 做网站ps文字有锯齿网络销售每天做什么
  • 教育网站制作费用seo综合查询怎么用
  • 幼儿园主题墙图片有实力的网站排名优化软件
  • 做网站有2个前提条件 一个是网站漂亮的网页设计
  • 站长工具5118app开发公司排行榜
  • 陌上香坊是做盗版的网站吗在线培训
  • 汉南网站建设window优化大师
  • 一个网站如何做推广方案设计新手怎么入行sem
  • 李洋网络做网站苏州做网站的专业公司
  • 个人网站开发与设计摘要如何制作一个网页
  • 许昌网站制作公司搜索引擎营销与seo优化
  • wordpress 获取参数seo和sem的区别与联系
  • 婚庆公司网站源码设计网站的软件
  • 潍坊正规建设网站百度文库官网
  • 擅自使用他人产品做网站宣传qq群推广方法
  • 做网店哪些网站比较好百度没有排名的点击软件
  • 网站建设怎么推广英语培训机构
  • 什么地方的人大工作网站做的好推广seo网站
  • 做互助盘网站多少钱搜索关键词优化排名
  • 新乡网站建设香水推广软文
  • 做资料分享网站有哪些怎么做好网站方式推广
  • 怎样做网站外部链接国内好的seo网站