Spring AOP基于注解方式实现
1. 场景介绍
目前假设我们有一个计算器类,并要为其中的方法添加日志功能。
计算器类如代码所示:
public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}
public class CalculatorPureImpl implements Calculator {@Overridepublic int add(int i, int j) {int result = i + j;return result;}@Overridepublic int sub(int i, int j) {int result = i - j;return result;}@Overridepublic int mul(int i, int j) {int result = i * j;return result;}@Overridepublic int div(int i, int j) {int result = i / j;return result;}
}
可以看到,计算器类的实现类目前只有最核心的功能方法。
下面,我们就使用spring aop为其添加日志功能。
2. 实现
步骤如下所示:
2.1 加入依赖
<!-- spring-aspects会帮我们传递过来aspectjweaver -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>6.0.6</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.0.6</version>
</dependency>
2.2 声明切面类
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;// @Aspect表示这个类是一个切面类
@Aspect
// @Component注解保证这个切面类能够放入IOC容器
@Component
public class LogAspect {// @Before注解:声明当前方法是前置通知方法// value属性:指定切入点表达式,由切入点表达式控制当前通知方法要作用在哪一个目标方法上@Before(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))")public void printLogBeforeCore() {System.out.println("[AOP前置通知] 方法开始了");}@AfterReturning(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))")public void printLogAfterSuccess() {System.out.println("[AOP返回通知] 方法成功返回了");}@AfterThrowing(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))")public void printLogAfterException() {System.out.println("[AOP异常通知] 方法抛异常了");}@After(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))")public void printLogFinallyEnd() {System.out.println("[AOP后置通知] 方法最终结束了");}}
2.3 开启aspectj注解支持
@Configuration
@ComponentScan(basePackages = "org.kkk")
//作用等于 <aop:aspectj-autoproxy /> 配置类上开启 Aspectj注解支持!
@EnableAspectJAutoProxy
public class MyConfig {
}
2.4 测试
@SpringJUnitConfig(value = {MyConfig.class})
public class AopTest {@Autowiredprivate Calculator calculator;@Testpublic void testCalculator(){calculator.add(1,1);}
}
相关文章:
Spring AOP基于注解方式实现
1. 场景介绍 目前假设我们有一个计算器类,并要为其中的方法添加日志功能。 计算器类如代码所示: public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}public class Calculator…...
MySQL中常用的操作语句已汇总
目录 一、库语句 1.查询现有数据库 2.创建数据库 3.选中数据库 编辑 4.删除数据库 二、初阶表操作 1.查看数据库现有表 2.查看表结构 3.创建表 4.删除表 5.全列查询 6.删除表2 7.修改操作 三、插入操作 1.全列插入 2.指定列插入 3.一次插入多组数据 4.插入…...
linux设置nginx systemctl启动
生成nginx.pid文件 #验证nginx的配置,并生成nginx.pid文件 /usr/local/nginx/sbin/nginx -t #pid文件目录在 /usr/local/nginx/run/nginx.pid 设置systemctl启动nginx #添加之前需要先关闭启动状态的nginx,让nginx是未启动状态 #关闭nginx /usr/local…...
stable diffusion faceswaplab换脸插件报错解决
错误提示: ERROR - Failed to swap face in postprocess method : apply_overlay() takes 3 positional arguments but 4 were given 打开插件对应目录: \sd-webui-aki-v4.6.1\extensions\sd-webui-faceswaplab\scripts\faceswaplab_utils中 imgutil…...
Kap - macOS 开源录屏工具
文章目录 关于 Kap 关于 Kap Kap 是一个使用web技术的开源的屏幕录制工具 官网:https://getkap.cogithub : https://github.com/wulkano/Kap 目前只支持 macOS 12 以上,支持 Intel 和 Apple silicon 你可以前往官网,右上方下载 你也可以使…...
Linux/Ubuntu/Debian基本命令:光标移动命令
Linux系统真的超级好用,免费,有很多开源且功能强大的软件。尤其是Ubuntu,真的可以拯救十年前的老电脑。从今天开始我将做一个Linux的推广者,推广普及Linux基础。 光标移动命令对于在终端(Terminal)内有效导…...
nvm下载,nodejs下载
进入nvm中文网,按照它的教程来,很简单!!! 往下翻...
大数据开发(Hadoop面试真题-卷七)
大数据开发(Hadoop面试真题) 1、Map的分片有多大?2、MapReduce的map进程和reducer进程的ivm垃圾回收器怎么选择可以提高吞吐量?3、MapReduce作业执行的过程中,中间的数据会存在什么地方?不会存在内存中吗&a…...
计算机网络(基础篇)复习笔记——体系结构/协议基础(持续更新中......)
目录 1 计算机网络基础相关技术Rip 路由更新操作 2 体系结构(OSI 7层, TCP/IP4层)应用层运输层网络层IPv4无分类域间路由选择 CIDRIPV6 数据链路层循环冗余校验CRC协议设备 物理层传输媒体信道复用技术宽带接入技术数据通信 3 网络局域网(以太网Ethernet) 4 通信过程编码:信道极…...
怎么做加密文件二维码?分享文件更安全
怎么做一个加密文件二维码?在日常的工作和生活中,通过扫描二维码来查看或者下载文件的方式,被越来越多的人所使用,一方面是二维码的成本低,另一方面有利于提升便捷性和用户体验。 为了保证内容的隐私性和安全性&#…...
手机中常用的传感器
文章目录 重力传感器 Gravity sensor三维坐标 加速度传感器 Accelerometer三维坐标 陀螺仪 Gyroscope三维坐标 磁力传感器 Magnetometer三维坐标 光线传感器 Light Sensor接近传感器 Proximity Sensor其他传感器协同工作相机自动调整 传感器有唤醒和非唤醒属性 关于重力传感器和…...
电脑工作电压是多少你要看看光驱电源上面标的输入电压范围
要确定电脑的工作电压,必须查看电源上标注的输入电压范围。 国内法规规定民用220V电压范围为10%-15%,也就是说通信220V电压正常范围为187--242V,供电设备一般为180V。 --250V电压范围,即正常情况下电脑电源电压不低于187V即可工作…...
自动驾驶---Motion Planning之Speed Boundary
1 背景 在上篇博客《自动驾驶---Motion Planning之Path Boundary》中,笔者主要介绍了path boundary的一些内容,通过将道路中感兴趣区域的动静态障碍物投影到车道坐标系中,用于确定L或者S的边界,并利用道路信息再确定Speed的边界,最后结合粗糙的速度曲线和路径曲线,即可使…...
php文件操作
一、文件读取的5种方法 1,file_get_contents: 将整个文件读入一个字符串 file_get_contents( string $filename, bool $use_include_path false, ?resource $context null, int $offset 0, ?int $length null ): string|false 可以读取本地的文件也可以用来打…...
计算机设计大赛 目标检测-行人车辆检测流量计数
文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...
Java二叉树 (2)
🐵本篇文章将对二叉树的一些基础操作进行梳理和讲解 一、操作简述 int size(Node root); // 获取树中节点的个数int getLeafNodeCount(Node root); // 获取叶子节点的个数int getKLevelNodeCount(Node root,int k); // 获取第K层节点的个数int getHeight(Node r…...
R语言数学建模(三)—— 模型工作流
R语言数学建模(三)—— 模型工作流 文章目录 R语言数学建模(三)—— 模型工作流前言一、模型工作流1.1 模型的起点和终点在哪里?1.2 Workflow基础1.3 将原始变量添加到workflow()1.4 workflow()如何使用formula基于树的…...
Android谈谈ArrayList和LinkedList的区别?
Android中的ArrayList和LinkedList都是Java集合框架中的List接口的实现,但它们在内部数据结构和性能特性上有所不同: 1. **内部数据结构**: - ArrayList是基于动态数组(可调整大小的数组)实现的。它在内存中是连续…...
Appcms存储型XSS漏洞复现
君衍. 一、环境介绍二、环境部署三、测试回显四、多次注入1、第一条评论2、第二条评论3、管理员登录查看 五、编写脚本获取cookie 一、环境介绍 这里需要注意,我没有找到原有的该环境源码包,因为这个是很久前的漏洞了,在XSS学习中可以查看下…...
springcloud-alibaba Sentinel入门
Releases alibaba/Sentinel GitHubSentinel下载官方 在cmd 里面运行 启动命令 java -jar sentinel-dashboard-1.8.6.jar 启动成功前提 java环境 ,已经注册到服务注册中心,8080端口没有被占用 启动后访问地址为 qhttp://localhost:8080http://lo…...
告别BiocManager安装卡顿:用conda/mamba一键部署R的clusterProfiler生信分析环境
告别BiocManager安装卡顿:用conda/mamba一键部署R的clusterProfiler生信分析环境 在生物信息学分析中,富集分析是不可或缺的一环,而clusterProfiler作为GO和KEGG功能富集分析的核心工具包,其重要性不言而喻。然而,许多…...
Krita Vision Tools:3分钟掌握AI智能选区,彻底告别手动抠图
Krita Vision Tools:3分钟掌握AI智能选区,彻底告别手动抠图 【免费下载链接】krita-vision-tools Krita plugin which adds selection tools to mask objects with a single click, or by drawing a bounding box. 项目地址: https://gitcode.com/gh_m…...
如何用代码驱动可视化:Mermaid Live Editor的实时图表编辑革命
如何用代码驱动可视化:Mermaid Live Editor的实时图表编辑革命 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-liv…...
FoxMagiskModuleManager:重新定义Magisk模块管理体验
FoxMagiskModuleManager:重新定义Magisk模块管理体验 【免费下载链接】FoxMagiskModuleManager A module manager for Magisk because the official app dropped support for it 项目地址: https://gitcode.com/gh_mirrors/fo/FoxMagiskModuleManager FoxMag…...
从“普惠”到“全能”:全志T153工业芯如何以HZ-T153_MiniEVM重塑工控开发体验
1. 为什么工业控制需要"普惠型"芯片? 在工业自动化领域,设备制造商常常面临一个两难选择:要么采用性能强大但价格昂贵的外国芯片方案,要么选择价格低廉但功能受限的入门级控制器。全志T153的出现打破了这种局面…...
基于LSTM与M2LOrder的对比:深度解析时序情感分析技术演进
基于LSTM与M2LOrder的对比:深度解析时序情感分析技术演进 最近在做一个关于用户连续对话情感追踪的项目,发现一个挺有意思的现象:用传统的LSTM模型,当对话稍微长一点,模型对前面情绪的“记忆”就开始模糊了。比如用户…...
一文读懂JJF2132—2024:荧光紫外老化试验箱校准该关注什么?
2024年12月14日,发布的JJF2132—2024《荧光紫外灯人工气候老化试验装置校准规范》正式实施,成为荧光紫外老化试验箱(QUV类设备)辐射照度参数校准的新的计量技术规范。这一规程的更新并非简单的技术迭代,而是对当前材料…...
第5章,[标签 Win32] :GDI 的基本图形
专栏导航 上一篇:第5章,[标签 Win32] :GDI 函数调用 回到目录 下一篇:第5章,[标签 Win32] :GDI 的其他方面的分类 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考…...
【实践指南】从零到一:手把手完成Lidar-IMU联合标定
1. 为什么需要Lidar-IMU联合标定? 当你第一次把激光雷达和IMU装到机器人上时,可能会发现一个奇怪的现象:明明机器人是静止的,但雷达点云和IMU数据对不上号。我去年调试一台服务机器人时就遇到过这种情况——IMU显示设备正在旋转&a…...
JDK-11 | 我为什么越来越喜欢用 Java 的 String/Collection 新 API
这是专栏第 11 篇。 这一篇我不讲单一语法点,而是讲一组“每天都能用到”的 API 升级。 这些能力看起来分散,但我在项目里落地后有一个共同收益: 样板代码更少、边界更清晰、代码审查效率更高。 一、JDK 8 时代的高频样板代码问题 在 JDK 8 项目里,我经常会看到这些重复…...
