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

云南红舰工贸有限公司的网站建设垦利网站设计

云南红舰工贸有限公司的网站建设,垦利网站设计,莱芜昨天下午又死了7个,做网站月入100万AOP的前世今生之代理模式1. 概述 什么是代理模式呢#xff1f;#xff1f;#xff1f; 在不修改原有代码 或是 无法修改原有代码的情况下#xff0c;增强对象功能#xff0c;替代原来的对象去完成功能#xff0c;从而达成了拓展的目的。 先给大家看下 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();} }通过代码Proxy.newProxyInstance 来获取代理后的实例我们后续调用方法eat, say 都是基于代理对象的需要获取getClassLoader, getInterfaces 我们都可以通过实例.getClass() 来获取最重要的就是要实现接口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://www.hkea.cn/news/14345365/

相关文章:

  • 织梦系统网站首页upcache=1免费的招标网站有哪些
  • 石岩做网站企业网站 建设公司
  • 外国优秀网站那个网站做视频没有水印
  • 我的网站模板下载 迅雷下载 迅雷下载wordpress 好用的插件推荐
  • 有哪个网站有免费视频素材南京网站搜索排名
  • 新的网站平台如何做地推网站建设的三要素
  • 广州网站优化平台科技网站制作
  • 潍坊高级网站建设价格天津飞机模型制作公司
  • 国外免费素材模板网站wordpress本地网站怎么访问
  • 私人精品货源网站有哪些亳州网站开发公司
  • 高端网站建设系统规划公司注册免费吗
  • 做仪表行业推广有哪些网站网站设计师培训学校
  • 做西点网站建筑做地图分析的网站
  • 厦门高端网站建设公手机移动网络屏蔽的网站
  • 互联网客户做网站做教育机构的设计哪些网站好
  • 网站分类目录源码wordpress 评论 折叠
  • 2016国外网站设计欣赏设计的网站都有哪些功能
  • 郑州app网站开发阿里百川 网站开发
  • 贵阳网站建设技术支持课程网站建设发展趋势
  • 网站开发html php网站开发用什么系统
  • 无锡网站排名优化公司网站备案电话号码
  • 如何申请国外网站企查查询官网入口
  • wordpress移除后台部分页面网站优化知识
  • 网站怎么实现两种语言婚庆公司网站
  • 把网站打包微信小程序wordpress 上传rar
  • 科网站建设辽宁网站建站系统哪家好
  • 网站监测浏览器类型域名年费多少网站建设
  • 新站如何快速收录手机网页小游戏
  • 标准个人简历模板免费下载seo公司 上海
  • 公司免费网站制作wordpress个人展示网站6