JavaWeb后端开发总结(3)

news2024/12/30 4:21:04

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.coloradmin.cn/o/2116387.html

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

相关文章

怎么利用NodeJS发送视频短信

随着5G时代的来临,企业的数字化转型步伐日益加快,视频短信作为新兴的数字营销工具,正逐步展现出其大的潜力。视频群发短信以其独特的形式和内容,将图片、文字、视频、声音融为一体,为用户带来全新的直观感受&#xff0…

单片机DMA原理及应用详解(上篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获! 目录 一、DMA简介 二、DMA原理 三、DMA中断 1. DMA中断的工作原理 2. DMA中断的优点 3. DMA中断的配置和处理 4. 应用场景 四、结语 一、DMA简介 1、DMA(D…

数据分析训练模型后输出模型评估报告

数据分析训练模型后输出模型评估报告 1、模型评估指标 1.1、概念: A:n个正样本,检测到是真值的数量 B:m个负样本,检测到是真值的数量 C:n个正样本,检测到假值的数量 D:m个负样本,检测到假值的数量 1.2、准确率(Accuracy) 正确预测的样本数量与总样本数量的比值。…

轨迹规划-B样条

B样条究竟是干啥的?白话就是给出一堆点,用样条的方式,给这些点连接起来,并保证丝滑的。 同时B样条分为准均匀和非均匀,以下为准均匀为例。 参考链接1:https://zhuanlan.zhihu.com/p/50626506https://zhua…

IP宿主信息在不同领域的广泛应用

在网络世界中,IP地址作为网络设备的唯一标识,扮演着至关重要的角色。而IP宿主信息,通过IP与POI/AOI信息关联,能够帮助用户了解特定IP地址所属的详细信息。本文将深入探讨IP宿主信息在不同领域的广泛应用。 什么是IP宿主信息&…

汽车功能安全--TC3xx之PBIST、MONBIST

目录 1.PMS 电源监控速览 2.PBIST 3.MONBIST 4.小结 1.PMS 电源监控速览 英飞凌TC3xx芯片的四种硬件机制,分别是: PMS:PBIST: Power Built-in Self Test. MCU:LBIST: Logic Built-in Self Test. PMS:MONBIST: Monitor Built-in Self Test. VMT:MBI…

嵌入式基础1-模拟电路技术-3.放大电路

1. 基本放大电路 1. 放大概念与放大电路性能指标 2. 基本共射放大电路工作原理 3. 放大电路的分析方法 阻容耦合 4.案例 2. 多级放大电路 1. 多级放大电路的耦合方式 2. 多级放大电路动态分析 3. 差分放大电路 3. 集成运算放大电路 4. 放大电路的反馈 1. 反馈的基本概念…

云计算第四阶段----CLOUD 01-03

CLOUD Day01 一、虚拟化平台搭建 虚拟化技术产品介绍 #黄线标注的,都是比较主流且常用的虚拟化平台。 虚拟化与云计算的关系 虚拟化是一种技术,它允许在单个物理服务器上创建和运行多个虚拟机(VMs),每个虚拟机都有其…

二叉树的相关选择题和基本方法(持续更新)

二叉树相关选择题和基本方法 选择题1选择题2选择题3选择题4选择题5选择题6选择题7选择题8选择题9选择题10选择题11选择题12选择题13选择题14选择题15选择题16选择题17选择题18选择题19选择题20选择题21选择题22实现二叉树的基本操作查询二叉树当中节点的个数遍历思想子问题思想…

[数据集][图像分类]熊分类数据集309张5类别黑熊泰迪北极熊等

数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):309 分类类别数:5 类别名称:["black","grizzly","panda","polar","teddy"] 每个类别图…

大数据之Flink(五)

15、Flink SQL 15.1、sql-client准备 启用Hadoop集群(在Hadoop100上) start-all.sh启用yarn-session模式 /export/soft/flink-1.13.0/bin/yarn-session.sh -d启动sql-client bin/sql-client.sh embedded -s yarn-sessionsql文件初始化 可以初始化模式、环境(流/批…

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrlz 如果不小心撤销多了,可以用 CtrlShiftZ 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c的标准程序库中的string&#xff0…

JS_循环结构

目录标题 while结构for循环foreach循环 while结构 几乎和JAVA一致 代码 <script> /* 打印99 乘法表 */ var i 1; while(i < 9){ var j 1; while(j < i){ document.write(j"*"i""i*j" "); j; } document.write("<hr/…

《机器学习》数据预处理 删除、替换、填充 案例解析及实现

目录 一、了解数据清洗 1、什么是数据清洗 2、数据清洗步骤 1&#xff09;缺失值处理 2&#xff09;异常值处理 3&#xff09;重复值处理 4&#xff09;格式修正 5&#xff09;数据一致性检查 6&#xff09;数据类型转换 二、数据清洗用法 1、有如下文件内容 2、完…

前向渲染路径

1、前向渲染路径处理光照的方式 前向渲染路径中会将光源分为以下3种处理方式&#xff1a; 逐像素处理&#xff08;需要高等质量处理的光&#xff09;逐顶点处理&#xff08;需要中等质量处理的光&#xff09;球谐函数&#xff08;SH&#xff09;处理&#xff08;需要低等质量…

线程的四种操作

所属专栏&#xff1a;Java学习 1. 线程的开启 start和run的区别&#xff1a; run&#xff1a;描述了线程要执行的任务&#xff0c;也可以称为线程的入口 start&#xff1a;调用系统函数&#xff0c;真正的在系统内核中创建线程&#xff08;创建PCB&#xff0c;加入到链…

C++17: 用折叠表达式实现一个IsAllTrue函数

前言 让我们实现一个 IsAllTrue 函数&#xff0c;支持变长参数&#xff0c;可传入多个表达式&#xff0c;必须全部计算为true&#xff0c;该函数才返回true。 本文记录了逐步实现与优化该函数的思维链&#xff0c;用到了以下现代C新特性知识&#xff0c;适合对C进阶知识有一定…

2025最新:如何打造公司财务管理系统?Java SpringBoot实现,一步到位管理企业财务!

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

STM32F407VET6开发板RT-Thread的移植适配

前言 最近购买了一块 STM32F407VET6开发板【魔女】&#xff0c;http://www.stm32er.com/ 通过原理图了解到&#xff0c;开发板板载 CMSIS-DAP 调试下载口&#xff0c;例程部分大部分以裸机程序为主 目标&#xff1a;打算移植适配到 RT-Thread 适配 RT-Thread RT-Thread 支持…

基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现

文章目录 概要整体架构流程技术名词解释技术细节1. 数据结构2. 自适应计算队列大小3. 生产者拼接缓存4. 高效地通知消费者 小结1. 性能表现情况2. 主要改进3. 源码和发行版 概要 准静态自适应环形缓存器&#xff08;Quasi-Static Adaptive Ring Cache&#xff09;是taskBus用于…