动态代理

①动态代理概念理解

动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都利用类似机制做到的,比如用来包装RPC调用、面向切面的变成(AOP)

实现动态代理的方式很多,比如JDK自身提供的动态代理,就是主要利用了下面提到的反射机制。还有其他的实现方式,比如利用更高性能的字节码操作机制,类似ASM、cglib(基于ASM)、Javaassist 等。

②Java 动态代理的作用是什么?

主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情,甚至根本不去执行这个方法,因为在InvocationHandler的invoke方法中,可以直接获取政治调用方法对应的Method对象,具体应用的话,可以添加调用日志,做事务控制等。

动态代理是设计模式当中代理模式的一种。(代理设计模式:为其他对象提供一种代理以控制这个对象的访问)

Java的动态代理是基于java.lang.reflect.Proxy、java.lang.reflect.invocationHandler两个类来完成的,使用了反射机制。

③代理模式

通过代理模式默默的解决一些与业务无关的问题,比如远程、安全、事务、日志、资源关闭等,让应用开发者可以只关注他的业务。

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

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

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

----cglib动态代理: 基于ASM机制实现,通过生成业务类的子类作为代理类。

 反射机制

① 引入

Java的反射机制在平时的业务开发过程中很少用到,但是在一些基础框架的搭建上应用非常广泛

②什么是Java反射机制

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

③反射机制提供了哪些功能

----在运行时判定任意一个对象所属的类

----在运行时构造任意一个类的对象

----在运行时判定任意一个类所具有的成员变量和方法

----在运行时调用任意一个对象的方法

----生成动态代理

④ 反射机制的应用场景

----动态代理(AOP、RPC)

----提供第三方开发者扩展能力(Servlet容器、JDBC连接)

----第三方组件创建对象(OI)

----逆向代码,例如反编译

----与注解相结合的框架,例如Retrofit

----单纯的反射机制应用框架,例如EventBus 2.x

----动态生成类框架 例如Gson

⑤反射机制的优缺点:

----优点:运行期类型的判断,动态类加载,动态代理使用反射

----缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。

Java 动态代理是基于什么原理的更多相关文章

  1. 大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解

    代理模式 Java动态代理运用了设计模式中常用的代理模式 代理模式: 目的就是为其他对象提供一个代理用来控制对某个真实对象的访问 代理类的作用: 为委托类预处理消息 过滤消息并转发消息 进行消息被委托 ...

  2. java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?

    我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...

  3. java动态代理的实现以及原理

    1.前言 之前对动态代理的技术只是表面上理解,没有形成一个体系,这里总结一下,整个动态代理的实现以及实现原理,以表述的更清楚一些. 2.动态代理的实现应用到的技术 1.动态编译技术,可以使用Java自 ...

  4. [转]Java动态代理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  5. java 基础之--java动态代理

    1.抽象角色:声明真实对象与代理对象的共同接口: 2.代理角色:相当于中介的作用,bridge,内部包含对真实角色的reference,在执行真实操作对象时,附加其他操作,相当于对真实角色的封装: 3 ...

  6. Java动态代理——框架中的应用场景和基本原理

    前言 之前已经用了5篇文章完整解释了java动态代理的原理,本文将会为这个系列补上最后一块拼图,展示java动态代理的使用方式和应用场景 主要分为以下4个部分 1.为什么要使用java动态代理 2.如 ...

  7. JAVA 动态代理原理和实现

    在 Java 中动态代理和代理都很常见,几乎是所有主流框架都用到过的知识.在面试中也是经常被提到的话题,于是便总结了本文. Java动态代理的基本原理为:被代理对象需要实现某个接口(这是前提),代理对 ...

  8. Java 动态代理原理图解 (附:2种实现方式详细对比)

    ​ 动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 ...

  9. java动态代理原理

    我们经常会用到Java的动态代理技术, 虽然会使用, 但是自己对其中的原理却不是很了解.比如代理对象是如何产生的, InvocationHandler的invoke方法是如何调用的?今天就来深究下Ja ...

随机推荐

  1. 关于ArrayList和List的区别

    ArrayList可以存放不同类型的数据,第一个可以是int,第二个可以是double等等 而List存放的是单一的数据类型的数据用法如下: List<GameObject> xx = n ...

  2. mac 获取idea&&datagrip激活码

    mac 版本的修改如下: 1). Command+Shift+G 2). /private/etc/ 3). 找到hosts文件,用文集编辑器打开 4). 输入0.0.0.0 account.jetb ...

  3. html的初识

    今天我们学习了Html语言,感觉学习这个是我期望很久的啦,之前在百度上面也看过html教程,但是看过之后也忘记啦,太多需要记忆的,所以也没记得什么啦.甚是遗憾啊,总感觉html需要学习好多东西啦的,但 ...

  4. 【HTML】改变鼠标样式图片css

    你需要一张图   .ico 的 格式 如果一开始你要解决的是怎么去用png 格式图片转成 ICO格式 先做一张32*32的PNG格式图片 然后 打开http://www.easyicon.net/co ...

  5. 有道云笔记同步IT笔试面试资源

    有道云笔记同步资源 放在手机上ipad或者电脑上看..特别方便...精心整理..暂时只有c++的..希望大家喜欢 暂时只扒了一些c++的..java的随后扒 主要都是取自<程序员面试笔试宝典&g ...

  6. Java初学者笔记四:按行读写文件和输入处理

    一.我们来看python的很简单: 1.读文件: with open("/path/file","r") as fr: for line in fr.readl ...

  7. 【BZOJ2251】[2010Beijing Wc]外星联络 后缀数组

    [BZOJ2251][2010Beijing Wc]外星联络 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是, ...

  8. thinkphp---自动验证的问题

    这段时间做一个项目:使用 thinkphp 做了一个自动验证,但是发现如果新增的时候,是能够进行自动验证的,但是在修改的修改的时候,会发现自动验证会失效. 验证的时候,模型是这样写的: protect ...

  9. 新版jquery的ajax调用 , jquery1.5以上

    原文出处:http://api.jquery.com/jQuery.ajax/,该链接页面底部有代码展示 示例1: $.ajax({ method: "POST", url: &q ...

  10. SaltStack实现Haproxy Nginx+php MySQL主从

    构建图如下 参考文档:https://github.com/unixhot/saltbook-code/tree/master