JavaWeb后端开发总结(3)

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.mzph.cn/bicheng/53722.shtml

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

相关文章

进程与计划任务

top 查看进程 x users 表示有几个shell开启 x stopped 前台任务在后台暂停firefox & 在后台运行,不在前面显示 ​​​​​​​这种方式常用于需要长时间运行且不需要即时交互的程序或命令,以便用户可以在终端中使用其他命令或进行其他操作&#…

Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究

技术背景 随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。 我们知道,Linux平台&…

debug对于开发工程师很重要

在日常开发中,总会遇到一些出人意料的bug,程序跑飞,上电就挂,程序没有按预期执行诸如此类的问题,没有好的调试方法,真的很难定位问题,更别说解决了。在这里分享我用过的一些调试方法&#xff0c…

“论剑”智算时代,长沙已经站在计算产业的“华山之巅”

文 | 智能相对论 作者 | 陈泊丞 共赴全新十年之约,长沙又来搞大事情了! 2024互联网岳麓峰会以“AI汇湘江 数智领航未来”为主题,全面聚焦在“AI”时代把握数字化、网络化、智能化发展机遇,积极响应当前人工智能技术迅猛发展的势…

Qt5.4.1连接odbc驱动操作达梦数据库

Qt5.4.1连接odbc驱动操作达梦数据库 1 环境介绍2 Qt5.4.1 安装2.1 图形化界面安装Qt5.4.12.2 配置Qt5.4.1 环境变量2.3 Qt5.4.1 生成 libqsqlodbc.so 并配置2.3.1 生成Makefile2.3.2 查看 libqsqlodbc.so 文件并配置 3 配置Qt测试用例4 达梦数据库学习使用列表 1 环境介绍 CPU…

实现卷积层的前向传播(Pythom版)

在TensorFlow框架中,实现卷积层(2维)的代码是 tf.keras.layers.Conv2D()。它主要接收如下几个参数, filters:卷积核的个数,也就是卷积层输出的通道数(沿axis-1的维度) kernel_size&a…

性能碾压pandas、polars的数据分析神器来了

来源:python大数据分析 费弗里 1 简介 就在几天前,经过六年多的持续开发迭代,著名的开源高性能分析型数据库DuckDB发布了其1.0.0正式版本。 DuckDB具有极强的单机数据分析性能表现,功能丰富,具有诸多拓展插件&#xf…

时空特征融合方向小论文创新点一次性都给你!看到就是赚到

朋友们,今天给大家推荐一个发小论文很不错的方向:时空特征融合。 时空特征融合是一种提高模型性能和准确性的关键技术,通过结合空间和时间维度的信息,它可以显著提高模型的预测精度和泛化能力,给我们提供更全面的数据…

惊!还有这种邮件群发神器!?

邮件群发工具是推广营销的重要利器。这种软件具备强大的功能,能够批量发送邮件,确保所发送的邮件不易被标记为垃圾邮件。同时,它还包括自动地址采集和整理功能,能够快速获取邮箱地址,省去了寻找地址的麻烦。 功能亮点&…

Trm理论 2(Word2Vec)

神经网络模型(NNLM)和Word2Vec NNLM模型是上次说过的模型,其目的是为了预测下一个词。 softmax(w2tanh(w1x b1)b2) 会得到一个副产品词向量 而Word2Vue就是专门求词向量的模型 softmax(w2*(w1*x b1)b2) Word2Vec softmax(w2*(w1*x b1)b…

连续信号的matlab表示

复习信号与系统以及matlab 在matlab中连续信号使用较小的采样间隔来表四 1.单位阶跃信号 阶跃信号:一个理想的单位阶跃信号在时间 t 0 之前值为0,在 t 0 及之后值突然变为常数 A(通常取 A 1) %matlab表示连续信号,是让信号的采样间隔很小…

Python 中的 SHAP 简介

本文中有多篇计划文章,后期会补充相关链接。鉴于公众号内无法后期修改文章,请关注原文链接。 如何创建和解释 SHAP 图:瀑布图、力图、平均 SHAP 图、蜂群图和依赖图 可直接在橱窗里购买,或者到文末领取优惠后购买: SHAP 是用于理解和调试模型的最强大的 Python 包。它可以…

Oceanbase Restore Point实践

官网链接:Restore Point-V3.2.4-OceanBase 数据库文档-分布式数据库使用文档 在很多应用系统中,用户需要查询数据库中的某个时间点,或者特定版本的数据来完成一些数据分析或汇总之类的操作。 OceanBase 数据库在 V2.2.7x 版本中提供了 Restor…

vscode ssh离线远程连接ubuntu调试

遇见问题: 1 ssh连接上无法启动服务器的虚拟环境; 2 ssh连接上启动服务器的虚拟环境后无法打断点; 对于问题需要参考下面连接安装python和debugy的插件拓展,并且配置json文件link。VSCode - 离线安装扩展python插件教程_vscode…

Jupyter Notebook设置代码提示和自动代码补全

算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号滴滴我 文章目录 在使用Jupyter Notebook中,会出现Jupyter不像Pycharm一样,可以 自动补全代码以及 代码方法提示等功能,这时候就需要通过给Jupyter安装插件来进行实现。 执行步骤&#…

EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework

作者:周克勇,花名一锤,阿里巴巴计算平台事业部EMR团队技术专家,大数据领域技术爱好者,对Spark有浓厚兴趣和一定的了解,目前主要专注于EMR产品中开源计算引擎的优化工作。 背景和动机 SparkSQL多年来的性能…

StarRocks Lakehouse 快速入门——Apache Iceberg

导读: StarRocks Lakehouse 快速入门旨在帮助大家快速了解湖仓相关技术,内容涵盖关键特性介绍、独特的优势、使用场景和如何与 StarRocks 快速构建一套解决方案。最后大家也可以通过用户真实的使用场景来了解 StarRocks Lakehouse 的最佳实践&#xff01…

2024国赛数学建模备赛|30种常用的算法模型之最优算法-层次分析法

层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模 糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美 国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活…

网络安全服务基础Windows--第13节-加密技术

基本保密通信模型 密码学发展 1. 古典密码学(1949年之前) 主要特点:数据的安全基于算法的保密 ● 在古典密码学中,密码算法通常是通过⼿⼯或机械装置实现的。 ● 数据的安全性主要依赖于算法本身的保密性,即“安…

Return arguments from function calling with OpenAI API when streaming?

题意:在使用OpenAI API进行流式传输时,如何返回函数调用的参数? 问题背景: Ive made a simple OpenAI API example with function calling. Im only using function calling to format the response, Im not calling multiple fu…