首页 > 编程语言 >Java静态代理和动态代理的区别

Java静态代理和动态代理的区别

时间:2023-03-27 11:55:54浏览次数:35  
标签:Java JDK 静态 代理 接口 对象 动态

一、静态代理
代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。

优点:可以在不修改目标对象的前提下扩展目标对象的功能。
缺点:
  冗余:由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
  不易维护:一旦接口增加方法,目标对象与代理对象都要进行修改。

二、动态代理
动态代理利用了 JDK API,动态地在内存中构建代理对象,从而实现对目标对象的代理功能。

动态代理又被称为 JDK 代理或接口代理。静态代理与动态代理的区别主要在:

静态代理在编译时就已经实现,编译完成后代理类是一个实际的 class 文件
动态代理是在运行时动态生成的,即编译完成后没有实际的 class 文件,而是在运行时动态生成类字节码,并加载到 JVM 中
注意:动态代理对象不需要实现接口,但是要求目标对象必须实现接口,否则不能使用动态代理。

JDK 中生成代理对象主要涉及两个类,第一个类为 java.lang.reflect.Proxy,通过静态方法 newProxyInstance 生成代理对象,第二个为 java.lang.reflect.InvocationHandler 接口,通过 invoke 方法对业务进行增强

JDK动态代理基于Java的反射机制

 

标签:Java,JDK,静态,代理,接口,对象,动态
From: https://www.cnblogs.com/loquat6/p/17261075.html

相关文章

  • 【JavaScript快速排序算法】不同版本原理分析
    说明快速排序(QuickSort),又称分区交换排序(partition-exchangesort),简称快排。快排是一种通过基准划分区块,再不断交换左右项的排序方式,其采用了分治法,减少了交换的次数。它的......
  • 某大厂面试题:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
    大家好,我是三友~~今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是......
  • Java 在代码中区分json和array
    publicstaticvoidmain(String[]args){Stringn="{\n"+""data":[\n"+"{\n"+""category":"设计资质",\n"+""certNameL......
  • java List报错Method threw ‘java.lang.UnsupportedOperationException‘ exception.
    List<String>status=Arrays.asList(query.getStatus().name());if(query.getStatusMap()==1){if(query.getStatus().equals(FileStatus.EXTRACTING)){......
  • 使用http代理做网页抓取需要注意什么
    现在,各家公司为达成目标,都需要抓取大量数据。企业需要根据数据来作出重大决定,因此掌握准确信息至关重要。互联网上有许多宝贵的公共数据。问题是如何轻松采集这些数据,而无......
  • 为什么HTTP代理可以提高工作效率
    在日常网络工作生活中,经常需要使用HTTP代理,在很多行业领域里,HTTP代理是工作中必不可少的一部分。很多人都使用过HTTP代理,它的速度比公司网络可能会慢一些,但大家都说使用......
  • 为什么独享HTTP代理池才是网络工作者最好的选择
    很多人在使用HTTP代理的时候,总是遇到访问受限的问题,特别是在访问一些热门网站的时候,尤为明显,这是为什么呢?市面上大多数服务商提供的HTTP代理池多为共享IP池,也就是同......
  • 常见java面试题以及对代码的理解
    1、Students=newStudent();做了哪些事情A:加载Student.class文件进内存B:在栈中为s开辟空间C:在堆中为学生对象开辟空间D:为学生对象的成员变量赋默认值......
  • 为什么不建议使用Java序列化?
    把对象转换为字节序列的过程称为对象的序列化。什么情况下需要用到序列化:把的内存中的对象状态保存到一个文件中或者数据库中时候;使用套接字在网络上传送对象的时......
  • Kotlin 与 JAVA 不同之处
    添加kotlin混编支持要在Android项目中添加Kotlin混编支持,需要进行以下步骤:在项目的build.gradle文件中添加以下代码:kotlinandroid{...//添加kotlin支......