JavaWeb后端开发总结(3)

news/2024/9/17 9:53:27/ 标签: java, 开发语言

AOP基础

AOP概述

首先我们要知道AOP是什么?

看下图

个人解析:

AOP叫做面向切面编程,但是实际上就是面向方法编程

图中下面一部分是一个AOP的案例

AOP快速入门案例代码实现

案例:测出业务中各个业务方法所需的执行时间

如果我们一个个对每个方法进行改代码,这样太过繁琐,然后我们就引入进来了AOP

下面是对这个案例的代码实现

第一步:我们要引入springAOP的依赖

第二步:编写AOP的代码

代码分析:

@Aspect这个注解是意味,这个类为有关AOP的类,也就是切面类,待会会介绍概念

然年@Around注解,以及后面一大串,在下面已经解释

之后的一些代码就是计算运行时间的逻辑代码,无需多介绍

AOP核心概念

如下图

个人理解:

有些概念已经介绍的十分清晰,我就来分析一下不太清晰的概念

切入点和切入点表达式

这两个其实是紧密相连的,切入点表达式表达出来的正是切入点

更通俗的来说就是,这些可调用的连接点,切入点表达式表达出来的是连接点的其中一些,而满足切入点表达式的连接点,我们又叫做切入点

AOP执行顺序

假设我们现在是在测试list方法的运行时间,左上角是我们定义的切面类,而切入点表达式(不是图中的切入点表达式,我们只是假设)指向的list方法,那么list方法我们就叫做它为切入点

然后这个list所在的类的对象为目标对象

左下角采取依赖注入的方法注入的并不是目标对象,如果是这样的话,AOP就白写了

AOP最本质上是基于动态代理来实现的

所以目标对象会自动加载为右下角的那个代理对象,而代理对象里的list方法是加强后的方法

也就是能够获得运行时间的list方法

所有左下角注入的对象是代理对象

然后左下角利用代理对象调用的lst方法自然也是加强后的list方法了,这样就完成了案例要求

以上就是这个案例AOP的执行顺序

AOP进阶

通知类型

通知分为很多类型,以下图片为通知类型的介绍,内容比较详细

其实看文字意思就能够明白各个类型的区别

如果还是看不懂,可以参考下面图片中的代码,包含了所有的通知类型的测试

以上就是所有代码

然后我们要引入一个注释

由于有些时候切入点的表达式一直在重复,所以我们可以利用一个注解提取出来,请看下图

通知顺序

这个通知顺序,就很简单了,了解以下就是了

看下图

切入点表达式

我们之前都是了解什么是切入点表达式

接下来我们要了解切入点表达式是如何写的

切入点表达式的写法有两种形式,如下图

execution

下面图中第一行介绍的式它的语法结构

图中打了?的意思是,?之前的一个内容可以省略,注意我说的是前一个,而不是多个

但是我们一般不省略,直接写出它的完整格式来

下图下面,还介绍了表达式中常用的通配符,这样就可以大大简短了代码长度

这个十分重要,看下图的解释我们应该也能明白怎么用

下图是一些书写规范的建议,可看可不看,反正就是尽量少省略

@annotation

当我们使用execution来写表达式的时候难免会遇到一个表达式写不出来,需要两个表达式来写的,如下图

为了解决这个问题,我们就引入了这个@annotation表达式

这个切入点表达式如何来用呢?

第一步:创建一个annotation的类(不是普通的类和接口)

个人感觉这就像是自己定义以一个注解,

到后面就可以看出来

,如下图

第二步:书写该类的一些注释

对代码进行分析:

第一行的注解表示的是,在运行时生效

第二行注解表示的是作用的目标是方法

由于这个类就是起一个标记作用,所以不用再写多余的代码

第三步:给切点类做上标记

如下图的MyLog这个注解,这个是我们上面自己定义的类的名字

所以我个人感觉上面就像是自己定义了一个注解

最后一步:写切入点表达式

凡是被做了标记的,就都行

连接点

我们刚开始的AOP入门是测试方法的运行时间,但是我们有时候并不是这个要求

而是获取连接点的某个信息

接下来就是如何获取连接点方法的信息的方法

首先这个是要分通知类型的,分为两个部分,每个部分获取信息的方法略有不同

如下图有详细介绍

下图为@Around通知类型

下图为其他通知类型

然后下图便是我们如何具体实现代码

记住返回值改一下,不是null


http://www.ppmy.cn/news/1522870.html

相关文章

冒泡排序算法介绍

冒泡排序算法介绍 如果真的累了,就拉上窗帘关上手机关掉闹钟深呼吸一口气钻进被窝,好好地睡一觉,难熬的日子总需要一些温暖,而什么都不如被窝的温暖来的踏实。 冒泡排序是一种经典的排序算法,它通过重复遍历待排序的序…

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念,指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序,这个人机对弈游戏让他的声名鹊起,机器学习这个概念才进入大众的是视线。 在这个跳棋程序…

智能合约漏洞(四)

前言 在前面的文章中,我们讨论了整数溢出/下溢和时间依赖漏洞。今天,我们将继续探讨智能合约中两种常见的安全问题:拒绝服务(Denial of Service, DoS)和恶意合约依赖漏洞。这些漏洞可能导致合约功能的中断或意外的恶意…

机器学习引领未来:赋能精准高效的图像识别技术革新

图像识别技术近年来取得了显著进展,深刻地改变了各行各业。机器学习,特别是深度学习的突破,推动了这一领域的技术革新。本文将深入探讨机器学习如何赋能图像识别技术,从基础理论到前沿进展,再到实际应用与挑战展望,为您全面呈现这一领域的最新动态和未来趋势。 1. 引言 …

windows下安装并使用nvm

目录 一.准备工作:卸载node 卸载步骤 二.下载nvm 三.安装nvm 三.配置下载源【重要】 四.使用nvm安装node.js 五.nvm常用命令 六.卸载nvm 一.准备工作:卸载node 如果电脑上已经有node,那么我们需要先完全卸载node,再安装…

ArcGIS Pro SDK (十二)布局 10 布局导出

ArcGIS Pro SDK (十二)布局 10 布局导出 文章目录 ArcGIS Pro SDK (十二)布局 10 布局导出1 布局导出1.1 将布局导出为 PDF1.2 将地图框导出为 JPG1.3 将与地图框关联的地图视图导出到 BMP1.4 将地图系列导出为单个 PDF1.5 将地图系列导出到单个 TIFF 文件2 布局选项2.1 获…

程序的格式框架与缩进

引言 在上一课时中,我们介绍了 Python 的基本概念,并成功运行了第一个 Python 程序。本课时将深入探讨 Python 程序的基本结构、缩进的重要性,以及如何正确使用注释。通过本课时的学习,你将更好地理解 Python 代码的组织方式&…

【重学 MySQL】十八、逻辑运算符的使用

【重学 MySQL】十八、逻辑运算符的使用 AND运算符OR运算符NOT运算符异或运算符使用 XOR 关键字使用 BIT_XOR() 函数注意事项 注意事项 在MySQL中,逻辑运算符是构建复杂查询语句的重要工具,它们用于处理布尔类型的数据,进行逻辑判断和组合条件…

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

Xilinx FPGA 原语解析(二):IBUFDS差分输入缓冲器(示例源码及仿真)

目录 前言: 一、原语使用说明 二、原语实例化代码模版 三、使用示例 1.设计文件代码 2.仿真文件代码 3.仿真结果 前言: 本文主要参考资料xilinx手册,《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for…

免费OCR 文字识别工具

免费:本项目所有代码开源,完全免费。 方便:解压即用,离线运行,无需网络。 高效:自带高效率的离线OCR引擎,内置多种语言识别库。 灵活:支持命令行、HTTP接口等外部调用方式。 功能…

Xilinx FFT IP使用

简介 本章节主要介绍FFT原理,以及Xilinx的FFT IP使用说明做详细介绍。 FFT介绍 FFT主要是将时域信号转换成频域信号,转换后的信号更方便分析。首先,FFT是离散傅立叶变换 (DFT) 的快速算法,那么说到FFT,我们自然要先讲清楚傅立叶变换。先来看看傅立叶变换是从哪里来的? 傅…

GitLab安装流程及日常使用流程

GitLab是一种基于Git的代码托管和协作平台,可以帮助开发团队更好地管理代码和协作开发。下面是GitLab的安装流程和使用方法的简要说明。 安装流程: 安装依赖:首先,确保你的服务器上已经安装了Git、Ruby和RubyGems。还需要安装一些…

Python世界:文件自动化备份实践

Python世界:文件自动化备份实践 背景任务实现思路坑点小结 背景任务 问题来自《简明Python教程》中的解决问题一章,提出实现:对指定目录做定期自动化备份。 最重要的改进方向是不使用 os.system 方法来创建归档文件, 而是使用 zip…

第十周:机器学习

目录 摘要 Abstract 一、RNN的进一步探索 1、RNN的困境 2、RNN的应用 二、谱图理论 1、理论基础​编辑 2、计算流程 3、傅里叶变换 4、filtering 5、GCN 总结 摘要 接着上周对RNN的讨论,这周学习了如何训练RNN,对于训练过程中出现的…

【MySQL】MySQL基础

目录 什么是数据库主流数据库基本使用MySQL的安装连接服务器服务器、数据库、表关系使用案例数据逻辑存储 MySQL的架构SQL分类什么是存储引擎 什么是数据库 mysql它是数据库服务的客户端mysqld它是数据库服务的服务器端mysql本质:基于C(mysql&#xff09…

IDEA插件推荐-SequenceDiagram,自动生成时序图

SequenceDiagram插件是一种用于绘制时序图的工具。时序图是一种图形化的表示对象之间消息传递顺序的方法。 该插件可以在使用各种编程语言编写代码时,方便地绘制时序图,以帮助开发者更好地理解和描述系统中的交互流程。 SequenceDiagram插件体验&#x…

字符串操作的高效工具—正则表达式

字符串操作的高效工具—正则表达式 一 . 概述1.1 认识正则表达式1.2 正则表达式体验案例 二 . 使用2.1 字符类2.2 逻辑运算符2.3 预定义字符2.4 数量词2.5 分组括号2.6 字符串中常用含有正则表达式的方法 正则表达式(Regular Expression,简称 regex 或 r…

《论面向方面的编程技术及其应用》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化进程的加快,计算机及网络已经被各行各业广泛应用,信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础,在信息系统的整个生命周期中提…

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

Course1-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week11️⃣线性回归(linear regression) f w , b ( x ) w x b f_{w,b}(x) wx b …