前言

这章节说说动态代理是基于什么原理实现的,
Java 是静态的强类型语言,但是因为提供了类似反射等机制,也具备了部分动态类型语言的能力,所以Java提供了一个反射机制来实现

那什么是静态代理呢?

静态代理

事先写好代理类,可以手工编写,也可以用工具生成。缺点是每个业务类都要对应一个代理类,非常不灵活

动态代理

运行时自动生成代理对象。缺点是生成代理代理对象和调用代理方法都要额外花费时间

Java中的动态代理的方式

在讨论java中的动态代理的时候先讨论一个面试题:
你能说说什么是反射机制?动态代理的实现是什么?

反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属
性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。

JDK的动态代理【基于接口】:

基于Java反射机制实现,必须要实现了接口的业务类才能用这种办法生成代理对象。新版本也开始结合ASM机制。

cglib的动态代理【接口,类都可以】:

基于ASM机制实现,通过生成业务类的子类作为代理类

什么是ASM机制呢?

java中的ASM机制就是通过字节码层面来实现对对象的代理,生成代理类,来实现动态代理

动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装 RPC 调用、面向切面的编程(AOP)。
实现动态代理的方式很多,比如 JDK 自身提供的动态代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比如利用传说中更高性能的字节码操作机制,类似 ASM、cglib(基于 ASM)、Javassist 等

面试复盘:

面试题考的方向是面试者对方式机制的理解,这里就简单介绍了下反射机制的是什么,实现,并没有太深入,如反射机制可以或类的,方法,字段等代码的demo,说动态代理的时候是分析面试者对java动态代理的实现,在java中的应用方面,这里我并没有继续说代理模式是什么,在后面的设计模式中讲解

动态代理是基于什么原理?相关推荐

  1. 动态代理的两种方式_动态代理是基于什么原理?

    代理模式 给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问. 什么是动态代理 运行时动态生成代理类. 动态代理我们需要些什么 1.业务接口(Interface) 业务的抽象表示. 2.业务 ...

  2. Java 反射机制和动态代理是基于什么原理,了解过吗?

    工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1."知其然不知其所以然". 做了多年技术,开发了 ...

  3. 备战金三专题: 动态代理是基于什么原理?

    回答: 反射机制是java语言提供的一种基础功能,赋予程序在运行时自省的能力. 通过反射我们可以直接操作类或对象,比如获取某个类的定义,获取类的属性和方法,调用方法或构造对象,还可以运行时修改类定义. ...

  4. JDK动态代理的底层实现原理

    JavaEE的开发中,许多框架用到了动态代理机制,例如Spring的AOP编程. 这里不介绍动态代理和静态代理概念,有兴趣的朋友自行百度. Java中的动态代理一般就两种:1. JDK自带 : 2. ...

  5. 静态代理、JDK与CGLIB动态代理、AOP+IoC原理

    静态代理.JDK与CGLIB动态代理.AOP+IoC 希望大家认真看完,感谢写这文章的大牛 目录 一.为什么需要代理模式 二.静态代理 三.动态代理,使用JDK内置的Proxy实现 四.动态代理,使用 ...

  6. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...

    现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...

  7. 【动态代理】CGLIB 动态代理的使用及原理

    1. CGLIB 动态代理介绍 什么是 CGLIB? CGLIB是一个功能强大,高性能的代码生成包.它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充. 通常可以使用Java的动态代理创 ...

  8. 使用 cglib_java动态代理(JDK和CGLIB原理解析与使用)

    CGLIB的动态代理 原理 代理为控制要访问的目标对象提供了一种途径.当访问对象时,它引入了一个间接的层.JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理.JDK的动态代理用起 ...

  9. 【Java】静态代理和动态代理简单实现和原理分析

    静态代理 1.定义抽象接口 首先将业务功能抽象出来,比如购买机票,所有的航空公司都提供一个购买的渠道,那么将这个购买行为抽象作为一个接口AirLine public interface AirLine ...

最新文章

  1. JavaScript中变量的相互引用
  2. jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
  3. JS中class和id的区别
  4. Camel 2.11 –没有Spring的Camel Web应用程序
  5. 无人机导航定位系统Java_无人机高精度室内定位导航的技术方案
  6. linux的基础知识——线程
  7. vue 指令 v-if v-else-if v-else
  8. 鸿蒙有没有手机管家,鸿蒙2.0手机快了,华为EMUI 11透露关键信息
  9. 2016 Google中国开发者大会游记
  10. 1018 锤子剪刀布
  11. ubuntu14.04 安装adb 调试设备
  12. ROS2——通信接口(十)
  13. mac安装win10_mac磁盘空间 mac安装win10分割多少磁盘空间合适
  14. 对Proteus与Keil联调过程中遇到的怪异现象解决方法
  15. VS配置永久OpenCV(小萌轻松操作):超细致
  16. Pytho 常见模块 / 用法备忘录
  17. mysql bit类型_MySQL bit类型
  18. STM32学习日记3---定时器TIM3重映射PWM波呼吸灯实验
  19. 数字信号与模拟信号的区别(转载)
  20. 【QT项目:视频播放器——Qt opengl编程】通过shader完成显示yuv

热门文章

  1. 如何使用python把json文件转换为csv文件
  2. input file类型自定义样式
  3. 【GDScript】检测在手机上的触摸按下、拖拽、抬手
  4. 游客不仅可以品尝到当地特色美食和丰富精美的各国菜肴
  5. 一年考研经历的回顾和总结(2)——不一样的辞职考研
  6. 记uniapp离线打包3.1.10(Hbuidlerx版本)前后区别
  7. 解决webview在小米手机显示
  8. 七年电商路,九条运营心经!
  9. mysql中的擎天柱---InnoDB引擎
  10. text的竖排和横排