Spring(aop介绍,底层实现,jdk代理,cglib代理)

news2024/9/27 19:14:30

02-aop简介-aop的作用及其优势_哔哩哔哩_bilibili 122

1、Spring的aop介绍

1.1aop是一种技术,aop是在运行之间执行的,他可以完成程序功能之间的松耦合,动态代理的作用也等同于Aop的作用:他提供了相应的封装,Aop是面向对象编程

2、查询数据的方法:这些方法我都需要一个日志的控制,我去保存,我去记录一下当前日志控制时间的进度

2.1 优势:抽取了代码,便于维护

3、画一个图看一下,在我们的业务仓,有个serive方法() 

3.1

4、aop诞生的意义,一个方法,对应一个日志控制,100个,对应100个日志控制,不好维护

5、后期引用的话,会方便很多,但是

6、有没有什么办法,在运行期间解耦合

6.1

7 AOP的核心就是完成一种动态结合的技术

8、切面指的是目标方法

8.1 功能增强方法:

9、AOP的底层实现----介入是核心

9.1 JDK代理,基于接口,生成代理的对象,他的缺点是必须有一个接口,如果没有接口就没办法代理

 9.2 cglib代理,我必须有一个儿子

10、要增强方法

11、注意cglib不是继承

--------12aop底层代码书写

12.1

13 JDK代理实现步骤

13.1 动态代理的角色,需要几个角色,有接口,有目标对象,

14、第一步,建好工程,先建个包:在java下建个package的包

14.1、 

 14.2  建好包之后,弄一个目标接口:

14.3  接口中方法不多写,意思意思就行了

 14.4 写完接口之后,再写一个实现类 

14.5 写完这个接口,这个类要继承我们写的接口,同时写

 14.6 alt+enter 实现我们的方法:

15、现在你可以单独建一个增强:增强或者建议 

15.1

 15.1 增强方法的完整写法:

16、现在我想增强save()方法

17、建我们的测试

17.1、这里不用写了,不用导入,可以直接写

 17.2 

 17.3 有三个参数,第一个里面是目标对象的内加载器,第二个是目标对象相同的接口字节码对象数组,第三个方法是接口

17.4 当前执行的目标方法,args代表传入的参数

 17.5 两个invoke不一样

 17.6 执行谁的,另一个是参数

 

18、他们最终生成的就是代理对象

18.1、用它接收行不行,他报错可以利用强转

 18.2 动态生成的代理对象,他们之间的关系是兄弟关系,如果是兄弟关系,我们用谁去接收

 18.3 这种写法正确 

19、我问你代理对象啥方法,接口啥方法,代理对象啥方法

20、执行看看

20.1 save run 他打的

 20.2 下一步我要对这个目标进行增强

20.3 增强之前我已经把他放到一个类当中了

 

21、获得advise

21.1 获得增强对象

 21.2 这里调用advise的before方法

 21.3 再调用其他方法 

22、给他弄一个返回值

23、给他写一个null的返回值

 

 

23.1 很多都用到上面的jdk代理,代码要看懂

------ spring可以集成第三方的cglib,如果第三方没有接口

25、cglib第一件事情,可以导入cglib的jar包,先找到我们的pom.xml,我们事先导入了context这个配置

 25.1 有一个core的核心

 

26、我们再看一下左边

27、我们看一下core

 27.1 你可以看到spring有那个cglib第三方的包,现在sprng已经集成了我们的包了

 27.2 java下建一个package的包

28、cglib想要完成得需要几个角色呀

29、三个部分都要,最终测试,类,等,接口不要 

30、有的地方,同样有前置和后置

30.1 第一步创建增强器,创建 Enhancer

 30.2 设置父类目标,为增强器设置他set他爹

他爹是target

30.3 、第三步设置setcallback

30.3.1 callback,ctrl + D点进去

 

 

30.3.2 我们一般new的是callback下的接口

30.3.3 多了一个方法的代理对象

 30.3.4 最后给他填一个.var 返回一个值

31、返回一个值 

32、将增强器创建成功

33、用target去接收数据

33.1 最终执行目标

34、最终效果

35、以上是两种方法实现的动态代理

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

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

相关文章

UG\NX二次开发 使用BlockUI设计对话框时,如何设置默认的开发语言?

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,C\C++,Qt-CSDN博客 简介: NX二次开发使用BlockUI设计对话框时,如何设置默认的代码语言? 效果: 方法: 依次打开“文件”->“实用工具”->“用户默认设置”->“用户界面”->“操作记录”->“…

如何进行微服务的集成测试

集成测试的概念 说到集成测试,相信每个测试工程师并不陌生,它不是一个崭新的概念,通过维基百科定义可以知道它在传统软件测试中的含义。 Integration testing (sometimes called integration and testing, abbreviated I&T) is the pha…

【C++精华铺】9.STL string

目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造:string(); 2. C串构造:string(const char* s); 3. 拷贝构造:string(const string& str); 4. 字符填充构造:string(size_t n, char c); 5. 迭代…

GDFN模块(restormer)

为了对特征进行变换,常规的前馈神经网络独立地在每个像素位置进行相同的操作。它使用两个1x1卷积层,一个用来扩展特征通道(通常4倍),第二个用来将特征通道减少到原来的输入维度。在隐藏层中加入非线性。 GDFN做了两个…

嵌入式实时操作系统的设计与开发

时钟管理 在RTOS中,时钟具有非常重要的作用,通过时钟可实现延时任务、周期性触发任务执行、任务有限等待的计时。 大多数嵌入式系统有两种时钟源,分别为实时时钟RTC(Real-Time Clock)和定时器/计数器。 实时时钟一般…

jvm——内存模型

1.java内存模型 1.1 原子性 1.2 问题分析 这里与局部变量自增不同,局部变量调用iinc是在局部变量表槽位上进行自增。 静态变量是在操作数栈自增。 这里的主内存和工作内存时再JMM里的说法。 因为操作系统是时间片切换的多个线程轮流使用CPU. 1.3解决方法 JMM中…

2023京东酒类市场数据分析(京东数据开放平台)

根据鲸参谋平台的数据统计,今年7月份京东平台酒类环比集体下滑,接下来我们一起来看白酒、啤酒、葡萄酒的详情数据。 首先来看白酒市场。 鲸参谋数据显示,7月份京东平台白酒的销量为210万,环比下滑约49%;销售额将近19…

前端需要理解的数据结构与算法知识

1 数组 1.1 集合、列表、数组的联系与区别 集合:由一个或多个确定的元素所构成的整体。类型不一定相同、确定、无序、互异。 列表(又称线性列表):按照一定的线性顺序,排列而成的数据项的集合。类型不一定相同、有序…

opencv实现全景图像拼接

目录 部分代码展示: 效果演示 查看处理过程 历史记录 完整演示视频: 完整代码链接 部分代码展示: 效果演示 查看处理过程 历史记录 完整演示视频: 无法粘贴视频........ 完整代码链接 视频和代码都已上传百度网盘&#x…

Kafka 简介 + 学习笔记

消息队列 先说明消息队列是什么: 亚马逊: 消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高…

机器学习基础之《分类算法(5)—朴素贝叶斯算法原理》

一、朴素贝叶斯算法 1、什么是朴素贝叶斯分类方法 之前用KNN算法,分类完直接有个结果,但是朴素贝叶斯分完之后会出现一些概率值,比如: 这六个类别,它都有一定的可能性 再比如,对文章进行分类:…

element Collapse 折叠面板 绑定事件

1. 点击面板触发事件 change <el-collapse accordion v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency"><div>与现实生活一致&#xff1a;与现实生活的流程、逻辑保持一致&#xff0c…

【附安装包】Fireworks 8安装教程

软件下载 软件&#xff1a;Fireworks版本&#xff1a;8语言&#xff1a;简体中文大小&#xff1a;88.3M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/s…

NetMarvel机器学习促广告收益最大化,加速获客

游戏出海的竞争日益激烈&#xff0c;这并非空穴来风。 从2021年第一季度至2022年第四季度&#xff0c;iOS平台的CPI增长了88%&#xff0c;意味着厂商需要花费近两倍的钱才能获取一个新用户。与此同时数据隐私政策持续收紧&#xff0c;更加提高了营销成本。 在成本高涨的当下&…

Java 中的集合类有哪些?如何分类的?

面试回答 Java 的整个集合框架中&#xff0c;主要分为 List、Set、Queue、Stack、Map 等五种数据结构。其中&#xff0c;前四种数据结构都是单一元素的集合&#xff0c;而最后的 Map 则是以 KV 对的形式使用。 从继承关系上讲&#xff0c;List、Set、Queue都是 Collection 的子…

uniapp 微信小程序:RecorderManager 录音DEMO

uniapp 微信小程序&#xff1a;RecorderManager 录音DEMO 简介index.vue参考资料 简介 使用 RecorderManager 实现录音。及相关的基本操作。&#xff08;获取文件信息&#xff0c;上传文件&#xff09; 此图包含Demo中用于上传测试的服务端程序upload.exe&#xff0c;下载后用…

基于Java+SpringBoot+vue前后端分离体育馆使用预约平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Tensor-动手学深度学习-李沐_笔记

介绍 Tensor&#xff0c;又称"张量"&#xff0c;其实就是n维度数组。不同维度的Tensor示意图如下&#xff1a; 关于Tensor.reshape reshape函数可以处理总元素个数相同的任何新形状&#xff0c;【3&#xff0c;2&#xff0c;5】->【3&#xff0c;10】->【5&a…

论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM

1 intro 时间序列领域预训练模型/foundation 模型的研究还不是很多 主要挑战是缺乏大量的数据来训练用于时间序列分析的基础模型——>论文利用预训练的语言模型进行通用的时间序列分析 为各种时间序列任务提供了一个统一的框架 论文还调查了为什么从语言领域预训练的Transf…

GEE/PIE遥感大数据处理与典型案例丨数据整合Reduce、云端数据可视化、数据导入导出及资产管理、机器学习算法等

目录 ​专题一&#xff1a;初识GEE和PIE遥感云平台 专题二&#xff1a;GEE和PIE影像大数据处理基础 专题三&#xff1a;数据整合Reduce 专题四&#xff1a;云端数据可视化 专题五&#xff1a;数据导入导出及资产管理 专题六&#xff1a;机器学习算法 专题七&#xff1a;…