一.简介

在不修改原业务的基础上,基于原业务方法,进行重新的扩展,实现新的业务。

二.结构

参考《疯狂Java讲义》

三.示例

public class MyPerson implements PersonInterface {@Overridepublic void doSomeThing() {System.out.println("doSomeThing");}@Overridepublic void saySomeThing() {System.out.println("saySomeThing");}private void test(){ System.out.println("private test"); }
}
public interface PersonInterface {void doSomeThing();void saySomeThing();
}
public static void main(String[] args) {final MyPerson p = new MyPerson();PersonInterface proxy = (PersonInterface) Proxy.newProxyInstance(MyPerson.class.getClassLoader(), MyPerson.class.getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("开始");if (Objects.equals(method.getName(), "saySomeThing")) {System.out.println("等待saySomeThing");p.saySomeThing();} else {Object invoke = method.invoke(p, args); // 调用任何public方法都拦截System.out.println("结束");}return null;}});proxy.doSomeThing();proxy.saySomeThing();
}

结果:

开始
doSomeThing
结束
开始
等待saySomeThing
saySomeThing

rpc系列-动态代理相关推荐

  1. Java代理系列-动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 动态代理可以做什么?比如说spring的AOP,它就是以动态代理为基础实现的,AOP拦截需要的请求,然后通过代理把请求的结果返 ...

  2. 【专栏】RPC系列(实战)-负重前行的“动态代理”

    关注公众号:离心计划,一起离开地球表面  [RPC系列合集] [专栏]RPC系列(理论)-夜的第一章 [专栏]RPC系列(理论)-协议与序列化 [专栏]RPC系列(理论)-动态代理 [专栏]RPC系列 ...

  3. 手撕RPC系列(2)—客户端基于stub动态代理的RPC

    一.前言 二.原理 三.前置基础 四.举例说明 五.总结 一.前言 上一节 手撕RPC系列(1)-最原始的RPC通俗理解 中讲了一个最最简单的rpc思想的例子.那种方法的缺陷太多,平常写代码一般不会那 ...

  4. 【手写系列】纯手写实现JDK动态代理

    前言 在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架.JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充.本 ...

  5. Java 动态代理及 RPC 框架介绍

    所谓动态代理,指的是语言提供的一种语法,能够将对对象中不同方法的调用重定向到一个统一的处理函数中来. python重写__getattr__函数能够做到这一点,就连世界上最好的语言也提供称为魔术方法的 ...

  6. netcore 中的动态代理与RPC实现(微服务专题)

    一.关于RPC的调用 1. 调用者(客户端Client)以本地调用的方式发起调用: 2. Client stub(客户端存根)收到调用后,负责将被调用的方法名.参数等打包编码成特定格式的能进行网络传输 ...

  7. MySQL---数据库从入门走向大神系列(十)-Connection对象池、装饰模式与动态代理模式

    问题概述: 之前本系列博客写的,全部都是一个connection对象,不知道大家发现没有,我们既然做了一个Connection工具类,那么大家肯定都是从那里面拿Connection对象的,之前的如果是 ...

  8. Spring系列之静态代理、动态代理、cglib代理与Spring AOP的处理

    本章内容 代理的概念及理解 如何实现静态代理 如何实现动态代理 静态代理与动态代理有什么区别与优缺点 JDK动态代理如何实现 cglib动态代理如何实现 JDK动态代理与cglib动态代理的区别 Sp ...

  9. 【愚公系列】2022年03月 .NET架构班 021-ABP vNext 动态代理模块

    文章目录 前言 1.Autofac概念 2.Castle概念 一.动态代理模块 1.EBusiness.Domain.Shared 2.使用 前言 abp的拦截器实现是基于Autofac.Extras ...

  10. 面试造火箭系列,栽在了cglib和jdk动态代理

    代理模式 关于代理模式,查阅比较专业的资料是这么定义的:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上 ...

最新文章

  1. HDU4009(最小树形图)
  2. SpringBoot集成FreeMarker
  3. MySql修改最大连接数的两种方式
  4. Android Studio 模拟器 不要皮肤,效果更好
  5. 计算机入域时域控用到的端口,【ADDC】域控需要开放的端口
  6. do还是doing imagine加to_imagine doing还是todo
  7. 实体类的动态生成(二)
  8. 用于集成测试的Maven Cargo插件
  9. java none怎么用tomcat_使用tomcat做java中间件
  10. C++ union 公共体
  11. 4种Golang并发操作中常见的死锁情形
  12. 你为什么要学习WordPress?
  13. 【渝粤教育】国家开放大学2018年秋季 0056-22T知识产权法 参考试题
  14. env-FindClass()为NULL的一种解决办法
  15. 飞机遭遇时空乱流离奇穿越到30年前
  16. python二叉树的非递归遍历
  17. 应用商店优化(ASO)之关键词及描述优化
  18. AIX 5300-06-01 + Oracle 9.2.0.6 = ORA-27061
  19. 小程序后台持续定位功能
  20. 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0

热门文章

  1. BIOS的两种引导模式
  2. git教程 git笔记 git常用 git使用 git操作 git简明 git版本控制 git仓库
  3. DINO Emerging Properties in Self-Supervised Vision Transformers 论文阅读
  4. Self-Supervised Vision Transformers with DINO-代码研读
  5. FITS python
  6. html单元格文字首行缩进,刘启智问:excel里怎么首行缩进 Excel在表格中的文字要首行缩进二字符,该如何设置?...
  7. java.lang.NumberFormatException: null原因
  8. Python学习-安装Anaconda及print我爱王晓静
  9. 如何在微信开发工具装插件教程
  10. 结构光三维重建(一)条纹结构光三维重建