面向切面编程-AOP

Aop

概述:Aspect Oriented Programming(面向切面编程、面向方面编程),即面向特定的方法编程,对原有的方法进行附加、增强

动态代理是面向切面编程的主流实现

实现步骤

  1. pom文件中导入AOP依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-start-aop</artifactId>
</dependency>

2.创建一个面向Aop编程的一个类
案例部分功能运行较慢,定位耗时比较长的业务方法,此时需要统计每一个业务方法的执行耗时
在这里插入图片描述
优点:
1.代码无入侵
2.减少重复代码
3.提高开发效率
4.维护方便

核心概念
1.连接点:JoinPoint,可以被Aop控制的方法
2.通知:Advice,指哪些重复的逻辑,也就是共性功能
3.切入点:PointCut,匹配连接点的条件
4.切面:Aspect,通知+切入点
5.目标对象,Target,通知所应用的对象
在这里插入图片描述

Aop进阶

1.通知类型

@Around:环绕通知,此标注的通知方法在目标方法前后都被执行
1.环绕通知需要自己调用ProceedingJoinPoint.proceed()。
2.环绕通知的返回类型为Object

@Before:前置通知,在目标方法前执行
@After:后置通知,在目标方法后执行,无论是否异常都执行
@AfterReturning:返回后通知,在目标方法后执行,有异常不会执行
@AfterThrowing:异常后通知,发生异常后执行

切入点表达式的抽取

//抽取切入点,@pointcut
@Pointcut("execution(* com.learn.service.serviceImpl.*.(**))")
public void pt(){};
//引用
@Before("pt()")
private void before(){}
//privite表示只有当前类可以抽取,public表示所有类都可以抽取

2.多个切面类通知执行的顺序

1.可以在切面类添加@Order(数字)注解来控制顺序
2.对于目标方法执行前的通知,数字小的先执行
3.对于目标方法执行后的通知,数字小的后执行

3.切入点表达式

1.execution(…):根据方法的签名来匹配
execution(访问修饰符 返回值 包名.类名.方法名(方法参数) throws 异常 )
访问修饰符,包名、类名,异常都可以省略,但是包名和类名省略的话,可能出错

在使用的过程中,可以使用通配符来描述切入点

1." * ",单个独立的任意符号,返回值、包名、类名、方法名、任意类型的一个参数
2. " … "多个连续的任意符号,可以通配任意层级的包、类型、任意个数的参数。

如果是比较复杂的切入点表达式,或者想要调用多个方法,切入点的表达式可以用 || 、 &&、 !
在这里插入图片描述
注意事项

  1. 业务层的命名方法需要统一规范,如查询方法名都以find开头
  2. 描述切点的方法通常基于接口描述,而不是直接描述实现类
  3. 满足业务需求的前提下,尽量缩小切入点的范围

2.@annotation(…):根据注解匹配
用于匹配标识有特定注解的方法
1.自定义切面注解,右键新建一个Annotation文件
2.添加注解@Retention,指定什么时候生效
3.添加@Target注解,指定生效的地方
在这里插入图片描述
4.在业务层对应的方法添加@注解的类名,如@MyLog
5.在切面类的切入点添加自定义的注解路径
在这里插入图片描述

4.连接点

1.对于@Around的通知,获取连接点信息,只能使用ProceedingJoinPoint
2.对于其他四种通知,获取连接点的信息只能用JoinPoint,他是ProceedingJoinPoint的父类

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中的事务隔离级别

Spring Boot中的事务隔离级别 介绍 Spring Boot是一个流行的Java框架&#xff0c;它提供了许多方便的注解和工具&#xff0c;使得数据库操作变得更加容易。其中&#xff0c;事务隔离级别是Spring Boot中一个非常重要的概念&#xff0c;它可以帮助开发者控制数据库操作的并发性…

Jmeter(jmeter-plugins插件的安装使用)

目录 一、安装JMter Plugins 二、Custom Thread Groups插件 Stepping Thread Group 元件 Ultimate Thread Group 一、安装JMter Plugins 1、官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter --> Options -->…

Chrome/Edge 浏览器多账号登录,测试同一业务系统的不同账号角色

文章目录 如何使用多账户&#xff1f;ChromeEdge 虽然说用不同浏览器测试也比较方便、还能顺带测试多浏览器兼容问题…… 但我是开发呀&#xff0c;我只想用我最习惯的谷歌浏览器完成快速开发&#xff0c;把功能铺上&#xff0c;专注于业务逻辑的开发 这些浏览器差异等只会给我…

vue+elementui实现英雄联盟道具城

目录 一、效果图 1.首页 2.商品列表、分类 二、实现重点讲解 1.首页轮播图 1.1技术实现&#xff1a; 1.2.鼠标聚焦切换图片事件 2.首页tab切换 3.商品列表实现 三、项目结构说明 四、总结 一、效果图 1.首页 项目与官方效果没有太大差异&#xff1a; 游戏导航&#xff1…

【SQL应知应会】分析函数的点点滴滴(一)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

Ubuntu离线安装Telnet服务

通过ssh上传telnet包&#xff0c;下载地址&#xff1a;telnet-0.17-41.2build1-amd64资源-CSDN文库 解压telnet包&#xff1a; tar -xzvf telnet_0.17-41.2build1_amd64.tar.gz 安装telnet服务&#xff1a; dpkg -i telnet_0.17-41.2build1_amd64.deb 安装完毕&#xff0c;测…

win10笔记本电脑总是自动休眠解决办法

1、运行regedit&#xff0c;进入注册表编辑器&#xff1b; 2、在打开的注册表编辑器左侧定位到&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0&…

Keras-深度学习-神经网络-电影评论情感分析模型

目录 模型搭建 模型训练 模型搭建 使用到的数据集为IMDB电影评论情感分类数据集&#xff0c;该数据集包含 50,000 条电影评论&#xff0c;其中 25,000 条用于训练&#xff0c;25,000 条用于测试。每条评论被标记为正面或负面情感&#xff0c;因此该数据集是一个二分类问题。…

MySql高级篇-006 MySQL架构篇-02MySQL的数据目录:数据库下的主要目录结构、文件系统如何存储数据

第02章_MySQL的数据目录 1.MySQL8的主要目录结构 # 查询名称叫做mysql的文件目录都有哪些[rootatguigu07 ~]# find / -name mysql安装好MySQL 8之后&#xff0c;我们查看如下的目录结构&#xff1a; 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/…

【Linux】4、BootLoader:UBoot | BIOS、BMC 介绍

文章目录 一、bootloader1.1 uboot 二、BIOS2.1 grub 三、BMC3.1 原理3.2 使用场景3.3 IPMI 规范3.4 配置和使用3.4.1 通过 ipmitool 设置 BMC IP3.4.2 通过 BIOS 设置 BMC IP 一、bootloader 参考 windows开机时会首先加载bios&#xff0c;然后是系统内核&#xff0c;最后启…

第九十三天学习记录:C++核心:类和对象Ⅱ(五星重要)

对象的初始化和清理 构造函数和析构函数 对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始化状态&#xff0c;对其使用后果是未知 同样的使用完一个对象或变量&#xff0c;没有及时清理&#xff0c;也会造成一定的安全问题 c利用了构造函数和析构函数…

React Native 集成到iOS原有的项目上

1.官方说明地址&#xff1a; 集成到现有原生应用 2. 主要步骤说明 把 React Native 组件集成到 iOS 应用中有如下几个主要步骤&#xff1a; 配置好 React Native 依赖和项目结构。了解你要集成的 React Native 组件。使用 CocoaPods&#xff0c;把这些组件以依赖的形式加入到项…

机器学习复习6

机器学习复习 1 - 在机器学习的背景下&#xff0c;什么是诊断(diagnostic)&#xff1f; A. 这指的是衡量一个学习算法在测试集(算法没有被训练过的数据)上表现如何的过程 B. 迅速尝试尽可能多的不同方法来改进算法&#xff0c;从而看看什么方法有效 C. 机器学习在医疗领域的应用…

Python 基本数据类型(五)

文章目录 每日一句正能量List&#xff08;列表&#xff09;结语 每日一句正能量 营造良好的工作和学习氛围&#xff0c;时刻牢记宗旨&#xff0c;坚定信念&#xff0c;胸怀全局&#xff0c;埋头苦干&#xff0c;对同事尊重信任谅解&#xff0c;发扬团体协作精神&#xff0c;积极…

让集合数据操控指尖舞动:迭代器和生成器的精妙之处

文章目录 &#x1f499;迭代器&#xff08;Iterator&#xff09;迭代器的特点&#xff1a;迭代器的优点&#xff1a;代码案例&#xff1a; &#x1f49a;生成器&#xff08;Generator&#xff09;生成器的特点&#xff1a;生成器的优点&#xff1a;代码案例&#xff1a; &#…

在WSL2中安装IntelliJ IDEA开发工具

一、wsl支持图形 windows安装xming https://sourceforge.net/projects/xming/ 添加白名单 查看服务器ip ifconfig 编辑配置文件(结合自己的安装目录) ‪D:\ProgramFiles\Xming\X0.hosts 启动Xlaunh wsl 配置并验证 #b编辑配置文件 vi ~/.bashrc #末尾增加配置 export DI…

二、1什么是面向对象编程?

你好&#xff0c;我是程序员雪球&#xff0c;接下来与你一起学习什么是面向对象编程。 面向对象编程是一种编程风格。它以类或对象作为组织代码的基本单元&#xff0c;并将封装&#xff0c;抽象&#xff0c;继承&#xff0c;多态四个特性&#xff0c;作为代码设计的实现基石。 …

你如何理解 JS 的继承?

在JavaScript中&#xff0c;继承是一种机制&#xff0c;允许一个对象&#xff08;子类&#xff09;从另一个对象&#xff08;父类&#xff09;继承属性和方法。这使得子类可以共享父类的功能&#xff0c;并有能∧自身定义新的功能。 JavaScript中的继承通过原型链实现。 具体来…

RabbitMQ管理界面介绍

1.管理界面概览 connections&#xff1a; 无论生产者还是消费者&#xff0c;都需要与RabbitMQ建立连接后才可以完成消息的生产和消费&#xff0c;在这里可以查看连接情况 channels&#xff1a; 通道&#xff0c;建立连接后&#xff0c;会形成通道&#xff0c;消息的投递获取依…

ChatGPT中 top_p 和 temperature 的作用机制

1. temperature 的作用机制 GPT 中的 temperature 参数调整模型输出的随机性。随机性大可以理解为多次询问的回答多样性、回答更有创意、回答更有可能没有事实依据。随机性小可以理解为多次询问更有可能遇到重复的回答、回答更接近事实&#xff08;更接近训练数据&#xff09;…