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,一经查实,立即删除!

相关文章

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

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

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应用:电商模特换装 网上找到一件衣服,没有模特 方法一:两图片融合,BLEND命令,效果不是很理想失真 方法二:服装图片垫图说明细节缺失https://cdn.discordapp.com/attachments/1…

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

注意:因为是第一次用iphone的快捷指令,不是很明白,所以之后多次运行发现有bug,所以快捷指令部分在下一章重新写,我用两个日期测试了,没问题,这一章可以当做熟悉快捷指令的一些操作用&#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. 默认的列表格式: 2. 修改间距: ************************************************** 分割线 ************************************************************ 3. 效果

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

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

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

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

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

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

数组的应用-24点游戏

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

JUC常见类

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java锁的策略🙉 🐹今日诗词:苟利国家生死以,岂因祸福避趋之🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主&#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什么是模型剪枝? 深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模…

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

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

Python中的 Lambda 函数

大家好,在 Python 编程的世界里,有一种功能强大却不常被提及的工具,它就是 Lambda 函数。这种匿名函数在 Python 中拥有着令人惊叹的灵活性和简洁性,却常常被许多开发者忽视或者只是将其当作一种附加功能。Lambda 函数的引入&…

Java18+ springboot+mysql +Thymeleaf 技术架构开发的全套同城服务家政上门系统源码(APP用户端+APP服务端+PC管理端)

Java springbootmysql Thymeleaf 技术架构开发的全套同城服务家政上门系统源码(APP用户端APP服务端PC管理端) 家政上门预约系统:该系统综合运用springboot、java1.8、vue移动支付、微信授权登录等技术,由用户小程序、站长小程序、…

亚马逊云科技峰会盛大举行 | 光环新网携光环云数据以高性能智算服务助力企业创新发展

2024年5月29日,云计算行业的年度盛典”2024亚马逊云科技中国峰会”在上海世博中心再次盛大启幕。作为全球领先的云计算服务提供商,亚马逊云科技峰会聚焦前沿科技,与来自不同行业、不同科技领域的优秀企业和用户共同探索AI时代的云端创新发展。…

华为官网的自助申诉

代码&#xff1a;如下 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> …

Facebook会话过期是什么情况?如何解决?

如果你点开这篇文章&#xff0c;可能你曾经遇到过Facebook会话过期的错误。无论你是在抓取Facebook数据还是只是浏览动态&#xff0c;看到这个错误消息都会让人很不爽。但别担心&#xff0c;我们将会分享解决Facebook会话过期错误的最佳方法&#xff0c;这样你就可以迅速修复问…

TemuTHunt使用简单介绍

数据列表 详情 列表及详情 数据监控 ------------------------------------------------华丽的分割线------------------------------------ 数据列表 商品详情 更多功能及分析报表 是不是很好用。