首页 > 其他分享 >(随笔)静态代理和动态代理

(随笔)静态代理和动态代理

时间:2023-08-17 14:57:24浏览次数:39  
标签:真实 逻辑 动态 静态 代理 对象 随笔

静态代理:

  • 在编译阶段就已经确定代理类和真实对象的关系。
  • 代理类需要手动编写或生成,为每个真实对象单独创建一个代理类。
  • 在代理类中可以添加额外的逻辑,如校验、日志等,增强功能。
  • 维护需对代理类和真实对象的修改,增加代码维护成本。
  • 在代理类和真实对象之间存在静态关联。

动态代理:

  • 在运行时通过反射机制动态生成代理类,无需手动编写代理类。
  • 代理类通过实现 InvocationHandler 接口,并重写 invoke 方法来实现对真实对象的代理逻辑。
  • 可以代理任意对象,无需为每个真实对象创建单独的代理类。
  • 在调用代理对象的方法时,会动态调用 invoke 方法,可以在此方法中添加额外的逻辑。
  • 可以实现动态添加、删除、替换代理逻辑,较为灵活。

区别

静态代理适合于需要对真实对象进行固定的增强逻辑,而动态代理适用于需要在运行时动态决定增强逻辑的场景。动态代理可以通过 Java 提供的 Proxy 类和相关接口(如 InvocationHandler)来实现,或者使用第三方库(如 CGLIB、Byte Buddy)来生成代理类。

需要注意的是,动态代理的实现相对较复杂,运行时生成代理类需要一定的性能开销。因此,在一些性能敏感的场景下,可能需要谨慎选择使用动态代理。

标签:真实,逻辑,动态,静态,代理,对象,随笔
From: https://www.cnblogs.com/Joseph-Jonardo/p/17637563.html

相关文章

  • typeScript学习-类、静态数据、静态属性应用
    typeScript学习类、静态数据、静态属性应用类:定义:类就是拥有相同属性和方法的一系列对象的集合。展开理解:类是一个模具,是从这该类包含的所有具体对象中抽象出来的一个概念,类定义了它包含的全体对象的静态特征和动态特征。举例:people类静态特征【属性】name、age、address......
  • 高效的HTTP代理,python如何助力
    在使用Python编写高效的HTTP代理时,可以采用以下一些小技巧来提升性能和效率:1、使用异步请求库:使用异步的HTTP请求库,如aiohttp或httpx,可以实现并发处理多个请求,提高代理的吞吐量和响应速度。2、复用连接:在处理多个请求时,尽量复用已建立的连接,而不是每次请求都创建新的连接。这可以通......
  • 代理IP中的账密提取和API提取是什么意思?
    在代理IP服务中,账密提取和API提取是两种常见的方式,用于获取和使用代理IP。账密提取:账密提取是指从代理IP服务提供商获取包含账户和密码的白名单。用户通过购买或订阅的方式获得账密白名单,其中包含了多个可用的代理IP账户和相应的密码。使用账密提取的方式,用户需要手动提取账户和密......
  • cmake随笔
    cmakecmake命令使用##配置projectcmake[<options>]<path-to-source>`常用选项:-S<path-to-source>:指定源文件根目录-B<path-to-build>:指定构建文件目录-G<generator-name>:指定生成器。具体支持哪些生成器可用-DCMAKE_BUILD_TYPE=Debug:配置debug版-DCMAKE_BUI......
  • ubuntu 修改网络 静态IP
    network:version:2renderer:networkdethernets:##可以ipa查看以太网连接名称eth0:dhcp4:nodhcp6:no##addresses添加网络掩码,如192.168.56.3/24addresses:-192.168.38.105/24routes:-to:defaul......
  • (随笔)龟兔赛跑(多线程调用同一资源时一个线程结束时其他线程保持运行)
    问题:当其一线程结束运行后其他线程保持运行而非结束现象:控制台会输出两次thewinneris:xxx代码如下packagecom.demo01;/***TODO模拟归途赛跑**@authorpangyangjian*@since2023/8/1616:10*/publicclassTextThread_5implementsRunnable{ @Override......
  • (随笔)e.printStackTrace()和throw new RuntimeException(e)区别
    e.printStackTrace()和thrownewRuntimeException(e)都是处理异常的方式,但它们有一些区别。e.printStackTrace():这是一个用于打印异常信息的方法。它将异常的完整堆栈跟踪输出到标准错误流(通常是控制台)。它将输出异常的类型、出现异常的位置以及其他相关的异常信息。e.print......
  • 独立站与代理IP:打造稳定安全的网站环境
    互联网的发展日新月异,现如今,越来越多的企业和个人通过搭建独立站的方式来展示自己的品牌和内容。独立站的优势是具有灵活性和自主性,但同时也需要面对网络安全和稳定性的挑战。在这个时候,代理IP的作用变得尤为重要,它可以帮助独立站构建一个稳定安全的网站环境。首先,代理IP可以提供更......
  • spring-boot静态资源目录配置
    spring-boot静态资源目录配置spring-boot静态资源默认为/src/main/resources下的/static目录,可以通过application.properties的server.servlet.context-path属性配置如:server.servlet.context-path=/public......
  • 静态缓存(static Buffer)和动态缓存(dynamic Buffer)
    创建缓存时,如果未使用D3DUSAGE_DYNAMIC,则所创建的缓存为静态缓存(staticBuffer),我们用静态缓存来存储静态数据(那些不需要经常修改或访问的数据),例如,地图和城市建筑的数据,如果使用的动态缓存,动态缓存一般放置在AGP存储区中,其内容可以迅速的更新,动态缓存的一个最大的优点是更新的速度......