ssm 学习笔记 day02

article/2025/7/21 6:23:20

AOP静态处理

现在我们编写一个加减乘除的组件(Bean)

package com.atguigu.spring02aop.calculator.impl;import com.atguigu.spring02aop.calculator.MathCalculator;
import org.springframework.stereotype.Component;@Component
public class MathCalculatorImpl implements MathCalculator {@Overridepublic int add(int a, int b) {return a + b;}@Overridepublic int sub(int a, int b) {return a - b;}@Overridepublic int div(int a, int b) {return a / b;}@Overridepublic int mul(int a, int b) {return a * b;}
}

现在我们开始静态代理,就是类似于@Aware注释,用接口把该组件变成自己的实例属性,然后方法就可以灵活使用改类的方法,从而编写一个log记录,因为类似于代理,所以一般称为静态代理。

package com.atguigu.spring02aop.proxy.statics;import com.atguigu.spring02aop.calculator.MathCalculator;
import jdk.jfr.DataAmount;
import lombok.Data;
import org.springframework.stereotype.Component;@Data
@Component
public class CalculatorStaticProxy implements MathCalculator {private MathCalculator target;public CalculatorStaticProxy(MathCalculator mc) {this.target = mc ;}@Overridepublic int add(int a, int b) {System.out.println("执行加法add a , b");int result = target.add(a, b);System.out.println("输出加法add a , b");return result;}@Overridepublic int sub(int a, int b) {System.out.println("执行减法sub a , b");int result = target.sub(a, b);System.out.println("输出减法sub  a , b");return result;}@Overridepublic int div(int a, int b) {System.out.println("执行除法div a , b");int result = target.div(a, b);System.out.println("输出除法div a , b");return result;}@Overridepublic int mul(int a, int b) {System.out.println("执行乘法mul a , b");int result = target.mul(a, b);System.out.println("输出乘法mul a , b");return result;}
}

执行结果如下
在这里插入图片描述

AOP动态代理

使用以下函数实现动态代理
在这里插入图片描述
参数分别为,代理对象的加载器、接口,以及拦截器。
如果我们用这个代理去代理之前所说的MathCalculator对象,我们可以采取以下写法。
在这里插入图片描述
在拦截器中,method.invoke(target,args)表示放行。
动态代理的封装
在这里插入图片描述

AOP的定义

在这里插入图片描述
简单地来说,就是类似于对运行的启动、运行、返回结果、错误这四个流程插入了一个类似于检测器/拦截器,更类似于try catch finally之类的语法。

@Aspect

首先引入包
在这里插入图片描述
ps:引入这个包的时候出现了一直引入不进去的情况,上面说not found,很奇怪,然后我重启了一下Idea就加载进去了。
在这里插入图片描述

切入点表达式的格式

在这里插入图片描述
在这里插入图片描述
example
在这里插入图片描述
测试
在这里插入图片描述

通配符

* 表示所有
..表示任意多个参数
最省略写法* *(..)

在这里插入图片描述

底层原理

在这里插入图片描述

JointPoint

切点,封装了当前保存的所有参数信息。
可以通过JointPoint获取方法名,参数信息,通过签名(里面存放了方法、参数)
在这里插入图片描述
在这里插入图片描述
也可以获得返回值,在注释中添加一个resulting对应的接受对象,如下图,用result来接收。
在这里插入图片描述

@PointCut

用法(标记定位点)
在这里插入图片描述

Around环绕通知

我认为环绕通知是最具体的、最底层的一个写法,基本上和我之前学的想法类似,就是在函数启动前加上一个切面,返回结果加上一个切面,最后结果加上一个切面,异常接收一个切面。分模块的好处就是模块化,低耦合,环绕可以更加灵活使用。
写法如下。
在这里插入图片描述

在这里插入图片描述


http://www.hkcw.cn/article/yGtPmVAySO.shtml

相关文章

无线通信模块赋能粮食烘干设备故障预判与远程诊断

一、项目背景 农业是我国国民经济的重要产业,粮食烘干作为粮食产后加工的关键环节,对于保障粮食质量、减少损耗具有重要意义。传统的粮食烘干设备通常需要人工现场监控和操作,不仅效率低下,而且容易受到人为因素的影响&#xff0…

Rerank的评测

RAG中如果第一次的召回不是很理想,最好优先排查一下相似度检索算法。如果发现是相似度算法的问题,那么可以增大top-k,然后引入更精确的算法进行rerank 针对rerank的评测,使用命中率(hit rate)和平均倒数排名…

从零到一:我的技术博客导航(持续更新)

作者:冰茶 最后更新:2025年5月31日 本文收录了我的C#编程学习心得与技术探索,将持续更新 前言 作为一名.NET开发者,C#语言的学习与探索一直是我技术成长的核心路径。本文集整理了我在C#学习过程中的思考与实践,希望能…

《java创世手记》---java基础篇(下)

《Java 创世手记 - 基础篇(下)》 第五章:契约与规范 —— 接口 (Interfaces) 与抽象类 (Abstract Classes) 造物主,在你日益繁荣的世界里,你发现仅仅依靠“继承”来构建“物种体系”有时会遇到一些限制。比如&#x…

2.2.2 06年T1

成功的同化机器——美国:2006年考研英语(一)Text 1精析 本文解析2006年考研英语(一)第一篇文章,揭示美国社会强大的文化同化力及其表现。 一、原文与翻译 Paragraph 1:美国社会的同化本质 L1: …

java对接bacnet ip协议(跨网段方式)

1、环境准备 #maven环境<repositories><repository><id>ias-releases</id><url>https://maven.mangoautomation.net/repository/ias-release/</url></repository></repositories><dependencies><dependency><…

ESP8266远程控制:实现网络通信与设备控制

概述&#xff1a; 最近一直在弄esp8266的网络通信&#xff0c;但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后&#xff0c;在很远的地方使用网络将其关掉 在网上找了两个教程都有程序&#xff0c;都跑通了 第一个 第二个找不到了&#xff0c;但是程序有 CSDN上放文…

解决方案:__cplusplus宏的值始终为199711L(即 C++98)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 问题现象&#xff1a;被 "冻结" 的__cplusplus宏 在使用 Visual Studio&#xff08;MSVC&#xff09;编译 C 代码时&…

c++流之sstream/堆or优先队列的应用[1]

目录 c流之sstream 解释 注意事项 215.数据流的第k大 问题分析 修正代码 主要修改点 优先队列的比较规则 代码中的比较逻辑 为什么这样能维护第 k 大元素&#xff1f; 举个例子 总结 Python 实现&#xff08;使用heapq库&#xff09; Java 实现&#xff08;使用P…

智慧工厂整体解决方案

该方案围绕智能工厂建设,阐述其基于工业 4.0 和数字化转型需求,通过物联网、大数据、人工智能等技术实现生产自动化、数据化管理及联网协同的特点。建设步骤包括评估现状、设定目标、制定方案、测试调整、实施计划及持续改进,需整合 MES、ERP 等软件系统与传感器、机器人等硬…

OpenTelemetry × Elastic Observability 系列(一):整体架构介绍

本文是 OpenTelemetry Elastic Observability 系列的第一篇&#xff0c;将介绍 OpenTelemetry Demo 的整体架构&#xff0c;以及如何集成 Elastic 来采集和可视化可观测性数据。后续文章将分别针对不同编程语言&#xff0c;深入讲解 OpenTelemetry 的集成实践。 程序架构 Op…

Cypress API 中文详解

🌐 Cypress API 中文详解(全分类汇总) 📌 Cypress 是一款专为现代 Web 应用构建的前端测试工具,它提供了强大且直观的 API 来模拟用户操作、监听网络请求、控制浏览器行为。**本篇文章将系统梳理 Cypress 所提供的常用命令与 API,帮助你快速掌握自动化测试核心能力。 �…

宇树机器狗go2—slam建图(2)gmapping

0.前言 上一篇番外文章带大家认识了一下slam中常用的一些点云格式&#xff0c;本期文章会教大家如何让宇树的机器狗go2在仿真环境中使用gnaaping进行2d建图&#xff0c;在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目…

CVE-2019-17558源码分析与漏洞复现

漏洞概述 漏洞名称&#xff1a;Apache Solr Velocity 模板注入远程命令执行漏洞 漏洞编号&#xff1a;CVE-2019-17558 CVSS 评分&#xff1a;9.8 影响版本&#xff1a;Apache Solr 5.0.0 - 8.3.1 修复版本&#xff1a;Apache Solr ≥ 8.4.0 漏洞类型&#xff1a;远程代码执行&…

Linux入门——入门常用基础指令(3)

文章目录 入门常用基础指令(3)grep指令压缩解压打包压缩的必要性zip/unzip指令关于rzsz的操作tar指令(重要) bc指令uname指令shutdown指令history指令几个常用的热键ctrl c和ctrl dctrl rTab按键 入门常用基础指令(3) 入门Linux的常用指令还是比较多的。本篇文章是Linux入门部…

常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY

网传压缩算法对比表 算法压缩率压缩速度解压速度支持流式压缩适用场景LZ4低极快极快是实时数据压缩、日志压缩、内存缓存等Zstandard高快快是文件压缩、网络传输、数据库备份等Brotli很高中等快是静态资源压缩&#xff08;HTML、CSS、JS&#xff09;等LZO低极快快是嵌入式系统…

Tkinter软件——显示txt标签的目标水平边框图像

代码&#xff1a; import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

学习vue3阶段性复习(插槽,Pinia,生命周期)

目录 插槽(匿名插槽&#xff0c;具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(统一管理&#xff0c;共享数据&#xff09; pinia概述 安装和使用Pinia 1 使用命令下载Pinia 2 再main.js中导入&#xff0c;注册到vue框架中 3使用pinia 持久化存储插件 1 第一步&…

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…