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

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.rhkb.cn/news/105815.html

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

相关文章

unity 模型显示在UI上 并交互(点击、旋转、缩放)

项目工程:unity模型显示在UI上并交互(点击、旋转、缩放)资源-CSDN文库 1.在Assets创建 Render Texture(下面会用到),根据需要设置Size 2.创建UIRawImage,并把Render Texture赋上 3.创建相机&am…

SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)

数字证书是网络世界中的身份证,数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可以在网络世界中为互不见面的用户建立安全可靠的信任关系,这…

vue实现表格的动态高度

需求:表格能够根据窗口的大小自动适配页面高度 防抖和节流函数的使用场景是当需要对频繁触发的事件进行限制时,例如: 防抖函数常用于限制用户在短时间内多次触发某一事件,例如搜索框输入并搜索,当用户一直在输入时,我们可以使用防抖函数来避免多次请求搜索结果,减轻服…

切换Debian的crontab的nano编辑器

Debian的crontab默认的编辑器是nano,用起来很不习惯,怎么才能转回vim呢? 用以下命令便可: #update-alternatives --config editor 出现以下所示的界面: 而后选择8使用/usr/bin/vim就能够了。 PS:若是你发现你的定时没有生效&…

【Python编程】将同一种图片分类到同一文件夹中

一、数据结构如下: 二、编程工具:Jupyter-Notebook 三、代码: import os import cv2 import shutilpath0os.getcwd()\\apple\\RGB path1os.getcwd()\\apple\\tof_confidence path2os.getcwd()\\apple\\tof_depth path3os.getcwd()\\apple\\…

【Adobe After Effects】关于ae点击空格不会播放反而回退一帧的解决方案

最近玩ae的时候遇见了一个小问题,就是有时候敲空格,视频没办法播放,反而会回退一帧,经过摸索发现了一个解决办法: 点击编辑---首选项 然后选择“音频硬件” 然后选择正确的默认输出,点击确定即可

Visual Studio 2022的MFC框架——WinMain函数

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 大家还记得创建Win32应用程序是怎么弄的吗? Win32应用程序的建立到运行是有一个个关系分明的步骤的: 1.进入W…

AURIX TriCore内核架构学习笔记

名词缩写 ISA - Instruction Set Architecture,指令集架构PC - Program Counter, holds the address of the instruction that is currently runningGPRs - 32 General Purpose RegistersPSW - Program Status WordPCXI - Previous Context InformationCSA - Conte…

腾讯云服务器价格表大全_轻量服务器_CVM云服务器报价明细

腾讯云服务器租用费用表:轻量应用服务器2核2G4M带宽112元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天,腾讯云服务器网长期更新腾讯云轻量…

Spring redis使用报错Read timed out排查解决

文章目录 使用场景报错信息解决方式 使用场景 我们使用redis作为缓存服务,缓存一些业务数据,如路口点位信息、渠化信息、设备信息等有一些需要实时计算的数据,缓存在redis里,如实时信号周期相位、周期内过车数量等有需要不同服务…

基于微信小程序的餐厅预订系统的设计与实现(论文+源码)_kaic

摘 要 随着消费升级,越来越多的年轻人已经开始不再看重餐饮等行业的服务,而是追求一种轻松自在的用餐、购物环境。因此,无人餐厅、无人便利店、无人超市等一些科技消费场所应势而生。餐饮企业用工荒已成为不争的事实。服务员行业的低保障、低…

linux安装部署gitlab全教程,包含配置中文

linux安装部署gitlab全教程,包含配置中文 大家好,我是酷酷的韩~ 1.前期准备 安装包下载地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 我这里选择的这个gitlab-ce-15.7.3-ce.0.el7.x86_64.rpm 还有一些相关依赖包(地址等审核过我放到…

Rust处理JSON

基本操作 Cargo.toml: [package]name "json"version "0.1.0"edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]serde { version "1", features …

分布式事务篇-2.1 阿里云轻量服务器--Docker--部署Seata

文章目录 前言一、Seata 介绍二、Docker 部署:2.1.拉取镜像:2.2.运行镜像:2.3.拷贝配置文件:2.4.部署:2.5.参数解释:2.5.1 端口:2.5.2 SEATA_IP:2.5.3 SEATA_PORT:2.5.4 …

⌈算法进阶⌋图论::拓扑排序(Topological Sorting)——快速理解到熟练运用

目录 一、原理 1. 引例:207.课程表 2. 应用场景 3. 代码思路 二、代码模板 三、练习 1、210.课程表Ⅱ🟢 2、2392.给定条件下构造举证🟡 3、310.最小高度树 🟡 一、原理 1. 引例:207.课程表 就如大学课程安排一样&…

【android12-linux-5.1】【ST芯片】HAL移植后没调起来

ST传感器芯片HAL按官方文档移植后&#xff0c;测试一直掉不起来&#xff0c;加的日志没出来。经过分析&#xff0c;是系统自带了一个HAL&#xff0c;影响的。 按照官方文档&#xff0c;移植HAL后&#xff0c;在/device/<vendor\>/<board\>/device.mk*路径增加PROD…

Goland 配置go modules 环境变量

我的配置&#xff0c;仅供参考&#xff1a; GOPROXYhttps://goproxy.cn,direct;GO111MODULEon;GOSUMDBoff;GONOSUMDB*

【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-进阶实战

四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数…

iOS HealthKit 介绍

文章目录 一、简介二、权限配置1. 在开发者账号中勾选HealthKit2. 在targets的capabilities中添加HealthKit。3. infoPlist需要配置权限 三、创建健康数据管理类1. 引入头文件2. 健康数据读写权限3. 检查权限4. 读取步数数据5. 写入健康数据 四、运行获取权限页面 一、简介 He…

1 Hadoop入门

1.Hadoop是什么&#xff1f; (1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 (2)主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。 (3)广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈 2.Hadoop的优势 3 Hadoop组成 4 HDF…