Java 设计者模式以及与Spring关系(四) 代理模式

目录

简介:

23设计者模式以及重点模式

代理模式(Proxy Pattern)

静态代理示例

spring中应用

动态代理

1.基于JDK的动态代理

target.getClass().getInterfaces()作用

内名内部类写法(更简洁,但不推荐)

2.基于CGLIB实现

spring中应用


简介:

本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。

23设计者模式以及重点模式

我们都知道设计者模式323种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。

(1)创建型模式:单例模式抽象工厂模式构建者模式工厂模式原型模式

(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

(3)行为型模式:访问者模式、模版方法模式命令模式、迭代器模式观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。

代理模式(Proxy Pattern)

代理模式是一种结构型设计模式,它通过提供一个替代对象(代理)来控制对另一个对象的访问。代理对象与原始对象实现相同的接口,这使得代理可以站在原始对象的位置被客户端使用,同时代理还可以在访问原始对象前后执行额外的操作,例如访问控制、延迟初始化、日志记录、监控等。

代理模式分为两类,常说的一般是动态代理。

类型:

  • 静态代理:手动创建代理类。

使用场景:在程序创建之前,代理类创建好的,代理目标是明确的可以使用静态代理。

  • 动态代理:在运行时动态创建代理类,Java 中可通过 Proxy 类和 InvocationHandler 接口实现。

使用场景:让编程人员在不修改对象代码的情况下,为这个对象添加额外的功能或者限制

静态代理示例

主要就是给金士顿的U盘算完各种折扣后75给淘宝,淘宝全都加25卖给客户,业务就是这个业务。

卖U盘的接口,定义一个U盘卖多少钱

制作优盘厂商实现类

代理类,淘宝类,在内部实现类中创建目标类对象引用,引用调用目标类方法,实现静态代理

自己进行购买

spring中应用

不知道你看出来了吗,这个像不像是我们spring框架中一个实现类调用另一个实现类方法。

动态代理

如果目标类很多呢,只是静态代理,那么需要创建的代理类就很多,比如上面的卖u盘例子,本来淘宝只卖金士顿,但是来个叫李帅帅的U盘厂家,但其实你只想想给这两个厂家做一样统一逻辑操作,比如还是加25块钱卖出去,这是就需要写第二个静态代理类,但如果有100个商品呢,这时就需要使用动态代理统一加载。

动态代理有两种实现方式

1.基于JDK的动态代理

目标类

动态代理类

method.invoke(target,args) 可以看做target.method(args)

实现类调用

target.getClass().getClassLoder() 得到目标类的实现类的类加载器

target.getClass().getInterfaces()它能够获得所实现这个对象的接口。其实这个接口不一定是目标类实现的接口,你看mybatis实现源码,接口就是任意接口。但是你要保证这第二个参数是个接口。

target.getClass().getInterfaces()作用

如果不懂这块的可以看看我这块,懂就略过

内名内部类写法(更简洁,但不推荐)

方法抽取放在一个别的类中方便使用

2.基于CGLIB实现

        动态代理有两种实现方式,一种是上述jdk的,核心是需要动态代理的目标类必须有接口还有一种是基于外部第三方类库的cglib,创建代理对象cglib不要求实现类也就是目标类去实现接口,cglib核心要求是继承目标类不能是finall。

        cglib 经常被应用在框架中,例如 Spring,Hibernat 等。cglib的代理效率高于 Jdk。对于 cglib 一般的开发中并不使用。做了一个了解就可以。

引入Jar包

<!--引入cglib依赖-->
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.1_2</version>
</dependency>

spring中应用

在 Spring 框架中,代理模式被广泛用于实现 AOP(面向切面编程),例如在事务管理和安全控制中。

------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

混口饭吃了!如果你需要Java 、Python毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。请在关注私信我,本人看到一定马上回复!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串】

代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串 39. 组合总和40.组合总和II131.分割回文串 题解参考y总的&#xff1a;http://www.acwing.com 39. 组合总和 我是一看就会&#xff0c;一写就废。先看代码&#xff1a; class Solution { public:…

Databend 开源周报第 129 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持标准流 标…

Redis相关面试题大全

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

SD-WAN如何解决网络质量问题?

当选择的线路面临故障、质量下降或拥塞时怎么办&#xff1f;SD-WAN采用智能选路策略&#xff0c;灵活应对各种场景&#xff0c;通过先进的线路切换机制和隧道内流控技术&#xff0c;为用户提供最佳的业务体验。下文将对SD-WAN的线路切换和隧道内流控进行介绍&#xff0c;帮助大…

PySimpleGUI:让spin支持循环

需求 自己用PySimpleGUI写了个小工具&#xff0c;但是发现它的spin不支持循环。 Tkinter本身的Spinbox有wrap这个开关可以觉得是否支持循环&#xff0c;但是没看到PySimpleGUI也支持这个特性。 代码实现 所谓spin的循环&#xff0c;是指当值变换到最大最小值时&#xff0c;可…

Java实现超市账单管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

sell控制脚本案例

1.压缩脚本 写一个脚本&#xff0c;完成如下功能 传递一个参数给脚本&#xff0c;此参数为gzip、bzip2或者xz三者之一&#xff1b; (1) 如果参数1的值为gzip&#xff0c;则使用tar和gzip归档压缩/etc目录至/backups目录中&#xff0c;并命名为/backups/etc-20160613.tar.gz&am…

unity项目《样板间展示》开发:火焰和UI设计

第二章&#xff1a;火焰和UI设计 前言一、火焰模型管理灶台火焰壁炉火焰 二、电视机播放三、UI设计结语 前言 这次带大家从0到1做一个unity项目&#xff1a;《样板间展示》。 顾名思义&#xff0c;项目内容是展示样板间&#xff0c;即玩家可以与房间中的物体、家具进行交互。 至…

网络安全概述---笔记总结

网络安全概述 网络安全---Cyberspace security 2003年美国提出网络空间的概念 --- 一个由信息基础设施组成的互相依赖的网络。我国官方文件定义&#xff1a;网络空间为继海&#xff0c;陆&#xff0c;空&#xff0c;天以外的第五大人类活动领域 发展阶段&#xff1a; 通信保…

如何用html画出一个烟花?

问题描述&#xff1a;如何用html画出一个烟花&#xff1f; 问题解答&#xff1a; 将下面代码复制到一个txt文件中&#xff0c;然后修改后缀txt→html&#xff0c;用浏览器打开就是烟花了。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">…

第4章-IP基本原理

目录 1. IP协议概述 1.1. 定义 1.2. 功能 1.3. IP网络的结构 1.4. IP头格式 2. IP地址和地址映射 3. IP包转发 4. 其他相关协议介绍 1. IP协议概述 1.1. 定义 IP协议&#xff1a;IP协议是网际互连协议&#xff1b; 工作层次&#xff1a;网络层&#xff1b; 封装&#…

esp32-idf eclipse 分区表(partition table / NVS)的读写demo

前言&#xff1a; 分区表&#xff08;Partition Table&#xff09;和 NVS&#xff08;Non-Volatile Storage&#xff09;是 ESP-IDF 中用于存储数据的两种不同机制。 分区表&#xff08;Partition Table&#xff09;&#xff1a; 分区表定义了将 Flash 存储器划分为不同逻辑分…

深度学习|RCNNFast-RCNN

1.RCNN 2014年提出R-CNN网络&#xff0c;该网络不再使用暴力穷举的方法&#xff0c;而是使用候选区域方法&#xff08;region proposal method&#xff09;创建目标检测的区域来完成目标检测的任务&#xff0c;R-CNN是以深度神经网络为基础的目标检测的模型 &#xff0c;以R-C…

机器学习笔记 - 基于自定义数据集 + 3D CNN进行视频分类

一、简述 这里主要介绍了基于自定义动作识别数据集训练用于视频分类的 3D 卷积神经网络 (CNN) 。3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 这里的模型主要基于D. Tran 等人2017年的论文“动作识别的时空卷积研究”。 …

react 实现页面状态缓存(keep-alive)

前言&#xff1a; 因为 react、vue都是单页面应用&#xff0c;路由跳转时&#xff0c;就会销毁上一个页面的组件。但是有些项目不想被销毁&#xff0c;想保存状态。 比如&#xff1a;h5项目跳转其他页面返回时&#xff0c;页面状态不丢失。设想一个 页面我滑倒了中间&#xf…

13个常见的 WordPress 块编辑器问题以及如何修复它们

您在使用 WordPress 块编辑器时遇到过错误吗&#xff1f; WordPress 在 2019 年用名为 Gutenberg 的全新内容编辑器取代了旧的经典编辑器。该编辑器使用块在 WordPress 中创建内容。然而&#xff0c;有时&#xff0c;在使用它时可能会遇到恼人的问题。 在本文中&#xff0c;我…

78.网游逆向分析与插件开发-背包的获取-背包类的C++还原与获取物品名称

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;77.网游逆向分析与插件开发-背包的获取-物品类的C还原-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&…

【论文阅读】Augmented Transformer network for MRI brain tumor segmentation

Zhang M, Liu D, Sun Q, et al. Augmented transformer network for MRI brain tumor segmentation[J]. Journal of King Saud University-Computer and Information Sciences, 2024: 101917. [开源] IF 6.9 SCIE JCI 1.58 Q1 计算机科学2区 【核心思想】 本文提出了一种新型…

R语言rvest爬虫如何设置ip代理?

前言 在R语言中使用rvest进行网络爬虫时&#xff0c;可以使用代理服务器来隐藏真实IP地址。有一些R包可以帮助爬虫中设置代理&#xff0c;其中一个常用的包是httr。以下是一个简单的例子&#xff0c;演示如何在rvest中设置IP代理 教程 一、获取代理IP并提取 二、详情设置 l…

[imx6][Linux4.9]IMX6平台 pinctrl子系统

文章目录 1、Pinctrl 子系统1.1、Pinctrl 子系统的作用1.2、设备树中PIN的配置信息1.2、设备树中PIN的配置信息中的复用信息解析1.3、PINCTRL子系统驱动 主控芯片硬件开发板内核版本imx6100ask_imx6ullLinux-4.9.88 1、Pinctrl 子系统 1.1、Pinctrl 子系统的作用 获取设备树…