AOP进阶

黑马程序员JavaWeb开发教程

文章目录

  • 一、通知类型
    • 1.1 通知类型
    • 1.2 注意事项
    • 1.3 @PointCut
  • 二、通知顺序
    • 2.1 执行顺序
  • 三、切入点表达式
    • 3.1 切入点表达式
    • 3.2 切入点表达式-execution
    • 3.2 切入点表达式- @annotation
  • 四、连接点
    • 4.1 连接点

一、通知类型

1.1 通知类型

  1. @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(重点)
  2. @Before:前置通知,此注解标注的通知方法在目标方法前被执行
  3. @After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
  4. @AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行(了解)
  5. @AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行(了解)

1.2 注意事项

  • @Around 环绕通知需要自己调用ProceedingJoinPoint.proceed() 来让原始方法执行,其他通知不需要考虑目标方法执行
  • @Around 环绕通知方法的返回值,必须指定为Object,来接收原始方法的返回值。

1.3 @PointCut

  • 该注解的作用是将公共的切点表达式抽取出来,需要用到时引用该切点表达式即可在这里插入图片描述
    在这里插入图片描述

  • 注意pt 方法的修饰符

    • private:仅能在当前切面类中引用该表达式
    • public:在其他外部的切面类中也可以引用该表达式

二、通知顺序

  • 昂有多个切面的切入点都匹配到了目标方法,䯮方法运行时,多个通知方法都会执行。

2.1 执行顺序

  1. 不同些面类中,默认按照切面类的类名字母排序
    • 目标方法前的通知方法:字母排名靠前的先执行
    • 目标方法后的通知方法:字母排名靠前的后执行
  2. 用 @Order(数字) 架子啊切面类上来控制顺序
    • 目标方法前的通知方法:数字小的先执行
    • 目标方法后的通知方法:数字小的后执行
      在这里插入图片描述

三、切入点表达式

3.1 切入点表达式

  1. 描述切入点方法的一种表达式
  2. 作用:主要用来决定项目中的哪些方法需要加入通知
  3. 常见形式
    • execution(…):根据方法的签名来匹配
      在这里插入图片描述

    • @annotation(…):根据注解匹配
      在这里插入图片描述

3.2 切入点表达式-execution

  1. execution 主要根据方法的返回值、报名、类名、方法名、方法参数等信息来匹配,语法为:execution(访问修饰符 返回值 包名.类名.方法名(方法参数) throws 异常)
    • 访问修饰符:可以省略
    • 包名、类名:可以省略
    • throws 异常:可以省略(注意是方法上声明抛出的异常,不是实际抛出的异常)
  2. 可以使用通配符描述切入点
    • *: 单个独立的任意符号,可以统配任意返回值、报名、类名、方法名、任意类型的一个参数,也可以统配包、类、方法名的一部分execution(* com.*.service.*.update*(*))
    • . . :多个连续的任意符号,可以统配任意层级的包,或任意类型、任意个数的参数execution(* com.itheima.DeptService.*(..))
  3. 书写建议
    • 素有业务方法名在命名是尽量规范,方便切入点表打死快速匹配。如:查询类方法以 find 开头,更新类方法以 update 开头
    • 描述切入点方法,通常基于接口描述,而不是直接描述实现类,增强拓展性
    • 在满足业务需要的前提下,尽量缩小切入点的匹配范围

3.2 切入点表达式- @annotation

  1. @annotation 切入点表达式,用于匹配标识有特定注解的方法@annotation(com.itheima.anno.Log)
    在这里插入图片描述

  2. 首先自己定义一个注解
    在这里插入图片描述
    在这里插入图片描述

  3. 想匹配哪个方法就在哪个方法上边加上自己定义的注解
    在这里插入图片描述

四、连接点

4.1 连接点

  • 在Spring 中用 JoinPoint 抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名、方法名、方法参数等。
    • 对于@Around 通知,获取连接点信息只能使用 ProceedingJoinPoint
    • 对于其他四种通知,获取连接点信息只能使用 JoinPoint,它是ProceedingJoinPoint 的父类型
      在这里插入图片描述

在这里插入图片描述

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

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

相关文章

浩江星灿面试(c++)

量化工程师:提供实时的数据,为炒股提供依据;稳定,快,准确; 对于性能的要求比较高; 文章目录 题目一、延迟最低的IPC(Inter-Process Communication)通信方式是什么?题目二、找出下面…

部署专属网页版ChatGPT-Next-Web

背景 工作学习中经常使用chat-gpt, 需求是多端使用gpt问答,因此搭建一个网页版本方便多个平台使用。最后选择了 ChatGPT-Next-Web 部署说明 一键部署自己的web页面,因为是使用免费的vercel托管的,vercel节点在全球都有,理论上突…

【YOLOv8改进[Conv]】使用YOLOv9中的Adown模块改进Conv模块的实践 + 含全部代码和修改方式 + 有效涨点

本文中进行使用YOLOv9中的Adown模块改进Conv模块的实践 ,文中包含全部代码和修改方式 ,有效涨点。 目录 一 YOLOv9 1 信息丢失问题 2 PGI ① 信息瓶颈 ② 可逆函数<

oracle 12c DB卸载流程

1.运行卸载程序 [rootprimary1 ~]# su - oracle [oracleprimary1 ~]$ cd $ORACLE_HOME/deinstall [oracleprimary1 deinstall]$ ./deinstall Checking for required files and bootstrapping ... Please wait ... 这里选择3 、回车、y、y、回车、ASM 这里输入y 2.删除相关目录…

Midjourney应用:电商模特换装

今天我们应用的是Midjourney应用&#xff1a;电商模特换装 网上找到一件衣服&#xff0c;没有模特 方法一&#xff1a;两图片融合&#xff0c;BLEND命令&#xff0c;效果不是很理想失真 方法二&#xff1a;服装图片垫图说明细节缺失https://cdn.discordapp.com/attachments/1…

Iphone自动化指令每隔固定天数打开闹钟关闭闹钟(一)

注意&#xff1a;因为是第一次用iphone的快捷指令&#xff0c;不是很明白&#xff0c;所以之后多次运行发现有bug&#xff0c;所以快捷指令部分在下一章重新写&#xff0c;我用两个日期测试了&#xff0c;没问题&#xff0c;这一章可以当做熟悉快捷指令的一些操作用&#xff0c…

STM32高级控制定时器之输入捕获模式

目录 概述 1 输入捕获模式 1.1 原理介绍 1.2 实现步骤 1.3 发生输入捕获流程 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM调制占空比函数 3.2 应用函数库 4 测试 4.1 功能框图 4.2 运行结果 源代码下载地址&#xf…

【Word】调整列表符号与后续文本的间距

1. 默认的列表格式&#xff1a; 2. 修改间距&#xff1a; ************************************************** 分割线 ************************************************************ 3. 效果

推荐一款开源电子签章/电子合同系统

文章目录 前言一、项目介绍二、项目地址三、技术架构四、代码结构介绍五、功能模块六、功能界面首页面手写签名面板电子印章制作数字证书生成 总结 前言 大家好&#xff01;我是智航云科技&#xff0c;今天为大家分享一个免费开源的电子签字系统。 一、项目介绍 开放签电子签…

热门新游 2024 植物大战僵尸杂交版 Mac 版本下载安装详细教程

最近植物大战僵尸杂交版可谓是非常的火&#xff0c;好多主播都在播这款游戏&#xff0c;我一个 Mac 党也想玩&#xff0c;可奈何该游戏目前只有 PC 版本&#xff0c;经过一番折腾终于在我的 Mac 上安装上了该游戏&#xff0c;分享给大家 其实安装过程也很简单&#xff0c;只需…

AI视频下载:ChatGPT数据科学与机器学习课程

ChatGPT是一个基于OpenAI开发的GPT-3.5架构的AI对话代理。作为一种语言模型,ChatGPT能够理解并对各种主题生成类似人类的响应,使其成为聊天机器人开发、客户服务和内容创作的多用途工具。 此外,ChatGPT被设计为高度可扩展和可定制的,允许开发人员对其响应进行微调并将其集成到…

# SpringBoot 如何让指定的Bean先加载

SpringBoot 如何让指定的Bean先加载 文章目录 SpringBoot 如何让指定的Bean先加载ApplicationContextInitializer使用启动入口出注册配置文件中配置spring.factories中配置 BeanDefinitionRegistryPostProcessor使用 使用DependsOn注解实现SmartInitializingSingleton接口使用P…

数组的应用-24点游戏

目录 24点游戏 游戏规则 游戏主要分为三部分 电脑出牌 用户输入算式 电脑判断胜负 总结 24点游戏 游戏规则&#xff1a; 54张扑克抽出大小王&#xff0c;剩余52张用来用于游戏&#xff1b;每一轮从52张牌中随机抽出4张&#xff1b;玩家运用加&#xff0c;减&#xff0…

JUC常见类

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java锁的策略&#x1f649; &#x1f439;今日诗词:苟利国家生死以,岂因祸福避趋之&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64…

Windows系统WDS+MDT网络启动自动化安装

Windows系统WDS+MDT网络启动自动化安装 适用于在Windows系统上WDS+MDT网络启动自动化安装 1. 安装准备 1.下载windows server 2019、windows 10 pro的ISO文件,并安装好windows server 2019 2.下载windows 10 2004版ADK及镜像包 1.1 安装平台 Windows 111.2. 软件信息 软件…

模型优化——模型剪枝、模型量化、知识蒸馏

1.模型剪枝 1.1什么是模型剪枝&#xff1f; 深度学习网络模型从卷积层到全连接层存在着大量冗余的参数&#xff0c;大量神经元激活值趋近于0&#xff0c;将这些神经元去除后可以表现出同样的模型表达能力&#xff0c;这种情况被称为过参数化&#xff0c;而对应的技术则被称为模…

摸鱼大数据——select查询7-10

7、union联合查询 union: 对重复数据会去重 union all: 对重复数据不会去重 ​ 注意&#xff1a;union和union all中两边的字段&#xff08;类型、顺序&#xff09;要对应上 示例: use day08; select * from students; ​ select id,name from students where id in (95001,9…

C++面试题其二

19. STL中unordered_map和map的区别 unordered_map 和 map 都是C标准库中的关联容器&#xff0c;但它们在实现和性能方面有显著区别&#xff1a; 底层实现&#xff1a;map 是基于红黑树实现的有序关联容器&#xff0c;而 unordered_map 是基于哈希表实现的无序关联容器。元素…

make xxxx_defconfig 分析

文章目录 执行依赖scripts_basic执行依赖outputmakefile实现%config make rpi_3_32b_defconfig V1&#xff1a; make -f ./scripts/Makefile.build objscripts/basiccc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -stdgnu11 …

opencv视频抽帧保存图片

opencv视频抽帧保存图片video2pic 文章目录 opencv视频抽帧保存图片video2picopencv视频按帧率抽帧opencv视频按帧数抽帧 opencv视频按帧率抽帧 import cv2 import os video_pathC:/Users/Desktop/video/1.mp4 nameos.path.basename(video_path).split(".")[0] outp…