Java代理

news2024/12/18 20:51:56

一、代理模式

代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。

上面类图中有一个订单接口类(OrderService)、一个订单实现类(OrderServiceImpl),订单模块的业务相对复杂和重要,如果这时候要在方法执行前后加上日志,就可以新增一个代理类来实现,而不用改动原来OrderServcieImpl核心业务逻辑代码。

代理模式角色

  • 抽象角色(Subject):声明了目标对象和代理对象共同接口。

  • 具体角色(RealSubject): 代理对象所代表的真实对象。

  • 代理角色(Proxy):代理对象内部含有对真实对象的引用,与真实对象有相同的接口以便在任何时候都可以代替真实对象,同时它可以在执行真实对象操作时附加其它操作。

二、静态代理

静态代理见上面例子

优点:没有侵入原代码

缺点:不同的接口要有不同的代理类实现类就会很冗余。

三、JDK动态代理

在运行时生成动态代理类,是基于Java的反射机制实现。

  • java.lang.reflect.Proxy: 调用newProxyInstance

              得到某一对象的代理对象。

public static Object newProxyInstance(ClassLoader loader,
            Class<?>[] interfaces,
            InvocationHandler h)

loader:指明生成代理对象使用哪个类装载器。

Class<?>[]: 指明哪个对象的代理对象。

InvocationHandler:指明这个代理对象要做什么事。

  • java.lang.reflect.InvocationHandler:代理实例调用处理程序一个接口。

代码:实现InvocationHandler接口的invoke方法,加入要处理的逻辑,客户端调用时先通过Proxy获取代理类对象。

优点:仅依赖于JDK代码实现简单。

缺点:必须实现接口的业务类才能生成代理对象。

四、CGLIB动态代理

CGLIB是一个强大的代理工具包,被广泛应用于AOP框架中以提供方法拦截操作,它的底层用ASM来操作字节码来生成类,需要注意CGLib与ASM版本的对应关系。

优点:不需要实现接口,可以对类直接进行代理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三种字符串格式化方法(%、format、f-string)

一、使用 % name 第一帅 print(我是宇宙无敌天下%s % name) age 18 print(我是宇宙无敌天下%s&#xff0c;我今年%d岁%(name,age)) price 5.99print(白心火龙果单价是%.1f元一斤%price)二、使用 format 在字符串中&#xff0c;使用{ }进行占位&#xff0c;然后在字符串后…

关于编程生成的目标文件到底是怎么链接生成可执行文件的

以c/c程序为例&#xff0c;要想生成可执行文件&#xff0c;需要经过如下步骤&#xff1a; #mermaid-svg-u1JzuqIf7rGHTIIk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u1JzuqIf7rGHTIIk .error-icon{fill:#55222…

SLAM从入门到精通(rviz自定义形状)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 rviz作为很好的上位机调试工具&#xff0c;它本身可以显示很多的传感器数据。比如说lidar、map、tf、camera、点云这些&#xff0c;在rviz上面显示…

Stable Diffusion新玩法火了!给几个词就能生成动图,连动图人物的表情和动作都能随意控制

夕小瑶科技说 原创 作者 | 小戏 单说大模型 AI 的发展对人们想象力释放的助力&#xff0c;基于 Stable Diffusion 模型的方法首当其冲。透过文本描述到图像生成技术&#xff0c;大模型为我们的想象力打开了一个恢弘的梦幻世界。透过点滴文字&#xff0c;就有可能重现禁锢在我们…

【Java 进阶篇】深入浅出:Bootstrap 轮播图

在现代网页设计中&#xff0c;轮播图是一个常见的元素。它们可以用于展示图片、广告、新闻、产品或任何您希望吸引用户注意力的内容。要实现一个轮播图&#xff0c;您通常需要一些复杂的HTML、CSS和JavaScript代码&#xff0c;这对于初学者来说可能会感到困难。但幸运的是&…

HWUI源码剖析(二) - 终于讲清楚OpenGL渲染的MVP矩阵的来龙去脉

概述 研究android8.1 HWUI源码的过程中,发现OpenGL是绕不过的一个知识点,不理解OpenGL的绘制基础,必然无法很好的理解Hwui基本原理,同时熟悉OpenGL之后,HWUI也是一个非常优秀的OpenGL 2D渲染的代码,本文将介绍一下OpenGL绘制图形的重要原理,为学习HWUI源码扫清障碍,本…

04、Python 爬取免费小说思路

目录 Python 爬取免费小说思路代码解析爬取东西基本的四行代码:user-agent安装模块从 bs4 导入 BeautifulSoup ,查询某个标签开头的数据筛选遍历获取小说的章节名称每章小说的链接获取请求网址的响应获取小说的内容筛选内容整理内容爬取下载到指定文件夹完整代码:Python 爬取…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

2023年【化工自动化控制仪表】最新解析及化工自动化控制仪表作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表最新解析参考答案及化工自动化控制仪表考试试题解析是安全生产模拟考试一点通题库老师及化工自动化控制仪表操作证已考过的学员汇总&#xff0c;相对有效帮助化工自动化控制仪表作业考试题库学员顺…

Linux进程(四)--进程地址空间(一)

前言&#xff1a;在Linux中&#xff0c;每个正在运行的进程都有自己独立的虚拟地址空间&#xff0c;该虚拟地址空间是逻辑上的抽象&#xff0c;用于在进程间提供隔离和保护。它将进程的内存分配和访问从物理内存中分离出来&#xff0c;为每个进程提供了一个独立的地址空间。这究…

【试题036】赋值运算符小例题2

1.题目&#xff1a;设int a0&#xff0c;b0&#xff0c;m0&#xff0c;n0;,执行(mab)/(nab)后m和n的值分别&#xff1f; 2.代码分析&#xff1a; int main() {//设int a0&#xff0c;b0&#xff0c;m0&#xff0c;n0;,执行(mab)/(nab)后m和n的值分别int a 0,b 0,m 0,n 0,…

openCV的CUDA GPU 版本安装 (Ubuntu windows 通用)

需要做template match, 比较注重时间&#xff0c;因此opencv 的普通版本不适用。需要用GPU 的。 下载 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git确保准备好以下内容 1&#xff1a; visual studio &#xff0…

吉利银河L6顶配续航测试 记录 方便后续对比

智能模式 不设置保电&#xff08;优先用电&#xff09;强动能回收&#xff0c;7成道路开启了L2辅助驾驶。基本无急加速&#xff0c;急减速。 空调开了不到20min 驾驶总时长&#xff1a;3h 5min,平均车速&#xff1a;35Km/h 充电&#xff1a; 慢充到100% 胎压&#xff1a; 2…

使用树莓派(香橙派)搭建文件共享服务器-samba服务器

域网内部通过文件共享来传输文件是一种非常方便的方式&#xff0c;小米摄像头也支持用文件共享smb模式将视频备份到局域网中的文件服务器上。之前我一直使用荣耀pro路由器游戏版&#xff0c;是自带USB接口支持文件共享服务的&#xff0c;接上USB移动硬盘&#xff0c;小米摄像头…

推荐收藏系列!2万字图解Hadoop

今天我用图解的方式讲解pandas的用法&#xff0c;内容较长建议收藏&#xff0c;梳理不易&#xff0c;点赞支持。 学习 Python 编程&#xff0c;给我的经验就是&#xff1a;技术要学会分享、交流&#xff0c;不建议闭门造车。一个人可能走的很快、但一堆人可以走的更远。如果你…

Spring AOP 详细深入讲解+代码示例

Spring AOP 这里是引用 一&#xff0c;介绍 spring aop工作原理图 1.什么是spring aop Spring AOP&#xff08;Aspect-Oriented Programming&#xff09;是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点&#xff08;例如日志记录、事务管理、安全性检查等&a…

solidworks 2024新功能之-让您的工作更加高效

您可以创建杰出的设计&#xff0c;并将这些杰出的设计将融入产品体验中。为了帮您简化和加快由概念到成品的产品开发流程&#xff0c;SOLIDWORKS 2024 涵盖全新的用户驱动型增强功能&#xff0c;致力于帮您实现更智能、更快速地与您的团队和外部合作伙伴协同工作。 SOLIDWORKS…

【JavaEE初阶】 线程池详解与实现

文章目录 &#x1f334;线程池的概念&#x1f384;标准库中的线程池&#x1f340;ThreadPoolExecutor 类&#x1f6a9;corePoolSize与maximumPoolSize&#x1f6a9;keepAliveTime&#x1f6a9;ThreadFactory&#x1f6a9;workQueue&#x1f6a9;RejectedExecutionHandler handl…

思科披露新的IOS XE零日漏洞,用于部署恶意软件植入

导语&#xff1a;思科最近披露了一个新的高危零日漏洞&#xff08;CVE-2023-20273&#xff09;&#xff0c;该漏洞被积极利用来在已经通过本周早些时候披露的CVE-2023-20198零日漏洞遭到侵害的IOS XE设备上部署恶意植入物。 漏洞披露 思科最近披露了一款名为CVE-2023-20273的高…

Leetcode-Easy题解1-回文数字

目录 解法1解法2 解法1 自己的想法,直接转成字符串首尾俩下标同时遍历比较 class Solution {public boolean isPalindrome(int x) {if(x<0){return false;}String strString.valueOf(x);int i0;for (;i<str.length()>>1;i){if(str.charAt(i)!str.charAt(str.leng…