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毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。请在关注私信我,本人看到一定马上回复!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

云风网(www.niech.cn)个人网站搭建(二)服务器域名配置

这里直接采用宝塔服务器运维管理面板来进行配置&#xff0c;简单无脑 宝塔 Linux面板8.0.5安装脚本 //Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec //Ubuntu/Deepi…

x-cmd pkg | hurl - HTTP 请求处理工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 Hurl 是 HTTP 请求处理工具&#xff0c;支持使用简单的纯文本格式定义的 HTTP 请求。它的用途非常广泛&#xff0c;既可以用于获取数据&#xff0c;也可以用于测试HTTP会话。 它可以链式处理请求&#xff0c;捕获数值…

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据&#xff0c;但对mysql的版本有要求&#xff0c;于是在服务器搭建了mysql5.7&#xff0c;顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…

阿里巴巴开源联邦学习框架FederatedScope

5月5日&#xff0c;阿里巴巴达摩院发布新型联邦学习框架FederatedScope&#xff0c;声称可以在不共享训练数据的情况下开发机器学习算法&#xff0c;从而保护隐私。&#xff0c;其源代码现已在Apache 2.0许可下发布在GitHub上。 介绍 该平台被描述为一个全面的联邦学习框架&a…

ShardingSphere数据库中间件

数据库中的数据量猛增&#xff0c;访问性能也变慢了&#xff0c;优化迫在眉睫 ? 1. 关系型数据库本身比较容易成为系统瓶颈&#xff1a;单机存储容量、数据库连接数、处理能力都有限。 2. 当单表的数据量达到 1000W 或 100G 以后&#xff0c;由于查询维度较多&#xff0c;即…

JavaEE进阶(6)SpringBoot 配置文件(作用、格式、properties配置文件说明、yml配置文件说明、验证码案例)

接上次博客&#xff1a;JavaEE进阶&#xff08;5&#xff09;Spring IoC&DI&#xff1a;入门、IoC介绍、IoC详解&#xff08;两种主要IoC容器实现、IoC和DI对对象的管理、Bean存储、方法注解 Bean)、DI详解&#xff1a;注入方式、总结-CSDN博客 目录 配置文件作用 Sprin…

docker 安装手册

docker 安装手册 第一步卸载旧的docker (如果安装过Docker否则跳过此步) 以防万一最好执行一遍 yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 第二步&#xff0c;安装相关…

开始学习vue2基础篇(指令)

一、 内容渲染指令 > {{}} 模板渲染&#xff08;模板引擎&#xff09; 1. {{数据绑定}} 2. {{简单计算}} 3. {{简单逻辑运算}}&#xff08;三元运算&#xff09; 4. {{做简单 js 判断}} 注意&#xff1a;不能写语句、不能解析 html 渲染、不能放在在属性身上 > v-…

JS进阶-作用域、垃圾回收机制、闭包、变量提升(一)

• 作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问 作用域分为&#xff1a; 局部作用域 全局作用域 • 局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数内…

UML中的实现关系

在UML&#xff08;统一建模语言&#xff09;中&#xff0c;“实现”关系是指一个类&#xff08;实现类&#xff09;实现一个接口或抽象类的方法的情况。这种关系通常用于指定类如何实现某个特定的接口规范。 UML中的实现关系 在UML类图中&#xff0c;实现关系用一条带有空心箭…

评估AI助手的五个关键维度,ChatGPT和文心一言比较

前言 在人工智能&#xff08;AI&#xff09;大潮中&#xff0c;AI助手已经渗透到了我们生活的方方面面。他们可以帮助我们获取信息、完成任务、甚至在某些情况下成为我们的朋友。今天&#xff0c;我们将深入探讨两个知名的AI助手&#xff1a;ChatGPT4和文心一言&#xff0c;从…