AOP基础
黑马程序员JavaWeb开发教程
文章目录
- 一、AOP概述
- 二、AOP快速入门
- 2.1 步骤
- 2.2 AOP的使用场景
- 2.3 AOP的优势
- 三、AOP核心概念
- 3.1 AOP核心概念
- 3.2 AOP执行流程
一、AOP概述
- AOP:Aspect Oriented Propragramming(面向切面变成、面向方面编程)其实就是面向特定方法编程
- 场景:
- 案例部分功能运行比较慢,定位执行耗时比较长的业务方法,此时需要统计每一个业务方法的执行耗时。
- 记录案例开始前的时间
- 运行案例
- 记录案例执行完成后的时间,计算案例执行时间
- 案例部分功能运行比较慢,定位执行耗时比较长的业务方法,此时需要统计每一个业务方法的执行耗时。
- 实现
- 动态代理是面向切面变成最主流的视线。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。
二、AOP快速入门
2.1 步骤
- 导入依赖:在pom.xml中导入AOP的依赖
<!-- AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
- 编写AOP程序:针对与特定方法根据业务需要进行编程
package com.itheima.mytlias.aop;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Slf4j
@Component
@Aspect
public class TimeAspect {//指定当前方法可以作用在哪些方法上(com.itheima.mytlias.service)所有包的所有接口和方法上@Around("execution(* com.itheima.mytlias.service.*.*(..))")public Object recordTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//1.记录方法开始时间long begin = System.currentTimeMillis();//2. 调用原始方法Object object = proceedingJoinPoint.proceed();//调用原始方法//3. 记录方法结束时间long end = System.currentTimeMillis();//4. 输出方法运行耗时log.info(proceedingJoinPoint.getSignature() + "执行耗时:{}ms", end - begin);return object;}
}
- 测试
- 首先需要运行程序,之后打开前端页面执行一个功能就可以看到日志中打印出来的耗时提醒

2.2 AOP的使用场景
- 记录曹组日志
- 权限控制
- 事务管理
2.3 AOP的优势
- 无代码侵入
- 减少重复代码
- 提高开发效率
- 维护方便
三、AOP核心概念
3.1 AOP核心概念
- 连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
- 通知:Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法);也就是入门程序中的recordTime 方法
- 切入点:PointCut,匹配连接点的条件,通知会在切入点方法执行时被应用(实际被AOP控制的方法)
- 切面:Aspect,描述通知与切入点大的对应关系(通知切入点)
- 目标对象:Target,通知所应用的对象


3.2 AOP执行流程
相关文章:
AOP基础
黑马程序员JavaWeb开发教程 文章目录 一、AOP概述二、AOP快速入门2.1 步骤2.2 AOP的使用场景2.3 AOP的优势 三、AOP核心概念3.1 AOP核心概念3.2 AOP执行流程 一、AOP概述 AOP:Aspect Oriented Propragramming(面向切面变成、面向方面编程)其实就是面向特定方法编程…...
EXSI虚拟机新增磁盘并将空间扩充到已有分区
这里写自定义目录标题 1、在EXSI虚拟机中新增一块磁盘配置大小2、确认新磁盘3、格式化新分区4、添加新分区到LVM5、将新增分区添加到已有分区里 1、在EXSI虚拟机中新增一块磁盘配置大小 注意事项: (1)需确保虚拟机已关闭活处于维护模式,避免数据丢失 (2…...
民国漫画杂志《时代漫画》第39期.PDF
时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!...
每天一个数据分析题(三百四十二)
根据量化对象是业务行为结果还是财务行为结果,可以将指标分为业务指标及财务指标两大类,以下说法正确的是? A. 财务指标是按照财务规则来对财务情况进行量化的指标 B. 业务指标是按照业务规则来对业务情况进行量化的指标 C. 业务指标需要按…...
c++会员消费积分系统
这段代码实现了一个简单的会员卡管理系统,具有以下功能: 会员开卡:用户可以输入会员的姓名和会员编号,系统将创建新的会员卡并记录相关信息。 消费积分:用户可以输入会员编号和消费积分,系统会根据会员编号…...
如何获知表中数据被删除
目录 1. 使用触发器 (Triggers)示例 2. 使用审计工具 (Audit Tools)示例 3. 使用Binlog (Binary Log)示例 4. 使用应用层记录日志示例 总结 要查询 MySQL 数据库表中的数据何时被删除,可以采取以下几种方法: 1. 使用触发器 (Triggers) 可以在表上创建一…...
机器学习之sklearn基础教程
码到三十五 : 个人主页 机器学习库scikit-learn(简称sklearn)是Python中一个功能强大的机器学习库,它提供了大量用于数据挖掘和数据分析的工具,包括分类、回归、聚类、降维等算法。文中我们一起简单探讨sklearn的一些基…...
ES升级--04--SpringBoot整合Elasticsearch
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 SpringBoot整合Elasticsearch1.建立项目2.Maven 依赖[ES 官方网站:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/index.html](…...
eclipse如何debug
步骤1:双击显示行数的数字来设置断点 步骤2:点击debug 步骤3:在弹出的窗口点击switch 步骤4:就可以调试了,右边是查看数据的,点击上面的图标进行下一步 步骤5:退出debug 步骤6:…...
无人售货机零售业务成功指南:从市场分析到创新策略
在科技驱动的零售新时代,无人售货机作为一种便捷购物解决方案,正逐步兴起,它不仅优化了消费者体验,还显著降低了人力成本,提升了运营效能。开展这项业务前,深入的市场剖析不可或缺,需聚焦消费者…...
开源代码分享(32)-基于改进多目标灰狼算法的冷热电联供型微电网运行优化
参考文献: [1]戚艳,尚学军,聂靖宇,等.基于改进多目标灰狼算法的冷热电联供型微电网运行优化[J].电测与仪表,2022,59(06):12-1952.DOI:10.19753/j.issn1001-1390.2022.06.002. 1.问题背景 针对冷热电联供型微电网运行调度的优化问题,为实现节能减排的目…...
7、架构-架构的安全性
即使只限定在“软件架构设计”这个语境下,系统安全仍然是一 个很大的话题。我们谈论的计算机系统安全,不仅仅是指“防御系统 被黑客攻击”这样狭隘的安全,还至少应包括(不限于)以下这些问 题的具体解决方案。 认证&am…...
LeetCode题练习与总结:路径总和Ⅱ--113
一、题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], target…...
Java复数计算
复数在数学、科学或者工程领域是很常用的,可以通过调用Apache Commons Math库来完成,也可以自己手撸。 一、使用Apache Commons Math库 这个库有多个版本,在写这篇文章时,它的最新版是2022年12月19日的4.0-beta1,构建…...
MySQL-事务日志
事务的隔离性由 锁机制 实现 事务的原子性、一致性、隔离性 由事务的 redo日志 和 undo 日志来保证 redo log 称为 重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。undo log 称为 回滚日志,回滚行记录…...
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类坐标点QPoint)
控件是PySide设计好的能承载用户输入、输出的小窗体,将多个控件有机整合,能形成用户所需要的界面。而每一个控件,都有属于自己的属性、方法、信号、槽函数和事件(event),且控件与控件之间又有继承关系。 G…...
算法练习——字符串
一确定字符串是否包含唯一字符 1.1涉及知识点 c的输入输出语法 cin>>s; cout<<"NO"; 如何定义字符串 切记:在[]中必须加数字——字符串最大长度,不然编译不通过 char s[101]; 如何获取字符串长度 char s[101];cin>>s;i…...
Flutter 中的 SliverOverlapInjector 小部件:全面指南
Flutter 中的 SliverOverlapInjector 小部件:全面指南 Flutter 是一个功能丰富的 UI 框架,由 Google 开发,允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的滚动视图系统中,SliverOverlapInjector 是一…...
7个Python爬虫入门小案例
大家好,随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。 一、爬虫原理 爬虫&a…...
linux 利用 ~$() 构造数字
2024.6.1 题目 <?php //flag in 12.php error_reporting(0); if(isset($_GET[x])){$x $_GET[x];if(!preg_match("/[a-z0-9;|#\"%&\x09\x0a><.,?*\-\\[\]]/i", $x)){system("cat ".$x.".php");} }else{highlight_file(__F…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
