AOP进阶-03.切入点表达式-execution

 一.切入点表达式-execution

访问修饰符(public/private等),包名.类名.,throws 异常都可以省略,但是建议包名.类名.不要省略,否则的话匹配范围太大影响程序执行效率。

*主要用来匹配单个参数,通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分。

..匹配任意层级的包,或者任意类型、任意个数的参数。 

二.演示

下面我们在代码中进行演示

package com.gjw.aop;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;/*** 目标:探究AOP中的切入点表达式-execution* execution主要根据方法的返回值、包名、类名、方法名、方法参数等信息来匹配,语法为:* execution(访问修饰符? 返回值 包名.类名.?方法名(方法参数) throws 异常?)* 可以使用通配符描述切入点*      *:单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分*      execution(* com.*.service.*.update*(*))*      ..:多个连续的任意符号,可以通配任意层级的包,或者任意类型、任意个数的参数*      execution(* com.itheima..DeptService.*(..))* 注意事项:*      根据业务需要,可以使用 且(&&)、或(||)、非(!)来组合比较复杂的切入点表达式*///@Aspect
@Slf4j
@Component
public class MyAspect6 {
//    @Pointcut("execution(public void com.gjw.service.impl.DeptServiceImpl.deleteById(java.lang.Integer))")        // 通配DeptServiceImpl中的deleteById方法
//    @Pointcut("execution(void com.gjw.service.impl.DeptServiceImpl.deleteById(java.lang.Integer))")
//    @Pointcut("execution(void deleteById(java.lang.Integer))")      // 会与DeptServiceImpl中的deleteById方法和DeptMapper中的deleteById方法都匹配上,因此会造成通知运行两次     包名,类名不建议省略//    @Pointcut("execution(void com.gjw.service.DeptService.deleteById(java.lang.Integer))")  //  根据接口名来匹配
//    @Pointcut("execution(void com.gjw.service.DeptService.*(java.lang.Integer))")   // 匹配DeptService接口下返回值为void的所有方法
//    @Pointcut("execution(* com.*.service.DeptService.*(*))")    // 匹配返回值为任意类型的com下的任意包下的service包下的DeptService类下的为单个形参任意方法
//    @Pointcut("execution(* com.gjw.service.*Service.delete*(*))")   // 匹配返回值为任意类型的com.gjw.service包下的以Service结尾的类下的以delete开头的传递参数为单个形参的方法//    @Pointcut("execution(* com.gjw.service.DeptService.*(..))")     //  匹配DeptService接口下的所有方法,不管形参个数类型是多少
//    @Pointcut("execution(* com..DeptService.*(..))")  匹配com包下所有叫做DeptService的类中的所有方法
//    @Pointcut("execution(* com..*.*(..))")  // 匹配com包下的所有方法 .. 慎用@Pointcut("execution(* com.gjw.service.DeptService.deleteById(java.lang.Integer)) ||" +"execution(* com.gjw.service.DeptService.list())")            // 匹配DeptServiceImpl类中的list方法和deleteById方法private void pt(){}@Before("pt()")public void before() {log.info("MyAspect6......before......");}
}

第一个定义访问修饰符为public,返回值为void,匹配com.gjw.service.impl包下的DeptServiceImpl类中的deleteById方法,方法的参数类型为Interger类型,个数为一个。

第二个省略方法的访问修饰符,返回值为void,匹配com.gjw.service.impl包下的DeptServiceImpl类中的deleteById方法,方法的参数类型为Interger类型,个数为一个。

第三个省略方法的访问修饰符,返回值为void,省略包名和类名。只匹配deleteById方法,方法的参数类型为Interger类型,个数为一个。这样的话会匹配到两个,一个是DeptServiceImpl.java类下的,另一个是DeptMapper接口下的,这样通知方法会执行两次。

第四个省略方法的访问修饰符,返回值为void,匹配接口下的deleteById方法,方法的参数类型为Interger类型,个数为一个。

第五个省略方法的访问修饰符,返回值为void,匹配接口下的任意方法,方法的参数类型为Interger类型,个数为一个。

第六个省略方法的访问修饰符,返回值为任意类型,匹配com包下的任意一级包下的service包下的DeptService类中的所有方法,方法的参数类型为任意类型,个数为一个。

第七个省略方法的访问修饰符,返回值为任意类型,匹配com.gjw.service包下的以Service结尾的类或接口中的以delete开头的方法,方法的参数类型为任意类型,个数为一个。

第八个省略方法的访问修饰符,返回值为任意类型,匹配com.gjw.service包下的DeptService接口中的所有方法,方法的参数类型为任意类型,个数为任意个数。

第九个省略方法的访问修饰符,返回值为任意类型,匹配com包下任意级包下的DeptService接口中的所有方法,方法的参数类型为任意类型,个数为任意个数。

第十个省略方法的访问修饰符,返回值为任意类型,匹配com包下的所有方法,方法的参数类型为任意类型,个数为任意个数。

第十一个匹配DeptServiceImpl类中的list方法和deleteById方法,我们使用或进行连接。

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

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

相关文章

神经网络发展简史:从感知机到通用智能的进化之路

引言 神经网络作为人工智能的核心技术,其发展历程堪称一场人类对生物大脑的致敬与超越。本文将用"模型进化"的视角,梳理神经网络发展的五大关键阶段,结合具象化比喻和经典案例,为读者呈现一幅清晰的AI算法发展图谱。 一…

NLP09-加强1-对比SVM

支持向量机(SVM) (一)导入 SVM 相关库 (二) 修改模型初始化 (三) 比较 朴素贝叶斯分类器 SVM分类器 支持向量机(SVM) 代码修改基于NLP09-朴素贝叶斯问句…

Spring 源码硬核解析系列专题(八):Spring Security 的认证与授权源码解析

在前几期中,我们从 Spring 核心到 Spring Boot,再到 Spring Cloud,逐步探索了 Spring 生态的底层原理。作为企业级应用的关键组件,Spring Security 提供了全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本篇将深入 Spring Security 的源码,剖析…

DeepSeek 开源了 DeepEP

DeepSeek又开源了一个超强技术:DeepEP通信库。实现了MOE之间的通信,性能更强了! DeepEP作为全球首个专为MoE(专家混合)模型训练和推理量身定制的EP(专家并行)通信库,其诞生标志着通…

【C语言】指针笔试题

前言:上期我们介绍了sizeof与strlen的辨析以及sizeof,strlen相关的一些笔试题,这期我们主要来讲指针运算相关的一些笔试题,以此来巩固我们之前所学的指针运算! 文章目录 一,指针笔试题1,题目一…

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区,使用前需先按Fn键 1.1、功能区 ESC:退出 F1:显示帮助信息 F2:重命名 F4:重复上一步操作 F5:刷新网页 …

在 macOS 系统上安装 kubectl

在 macOS 系统上安装 kubectl 官网:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ 用 Homebrew 在 macOS 系统上安装 如果你是 macOS 系统,且用的是 Homebrew 包管理工具, 则可以用 Homebrew 安装 kubectl。 运行…

004 Kafka异常处理

6.异常处理 文章目录 6.异常处理1.异常分类与处理原则2.生产者异常处理1. 同步发送捕获异常2. 异步发送回调处理 3.消费者异常处理1.全局异常处理器2.方法级处理3.重试yml配置 4.死信队列(DLQ)配置1. 启用死信队列2. 手动发送到DLQ 5.事务场景异常处理1.…

Spring MVC框架六:Ajax技术

精心整理了最新的面试资料,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 jQuery.ajax Ajax原理 结语 创作不易,希望能对大家给予帮助 想要获取更多资源? 点击链接获取

数据结构与算法:二维前缀和、二维差分及离散化技巧

前言 有一维的前缀和以及差分当然有二维的~ 一、二维前缀和 1.内容 二维前缀和就是求二维数组上从&#xff08;0,0&#xff09;位置到&#xff08;i,j&#xff09;位置的累加和。 2.模板——二维区域和检索 - 矩阵不可变 class NumMatrix { public:vector<vector<i…

在 Vue 组件中,如何确认父组件在 add 模式下传入 value 的情况及其对子组件 getProducts() 方法的触发影响?

文章目录 父组件中 <ave-form> 的使用add 模式下触发逻辑value 的传入情况是否触发 getProducts()&#xff1f; 验证 add 模式下 getProducts() 是否触发结论&#xff1a; 检查父组件传入 value 的完整情况如何明确知道父组件传入的 value最终回答 父组件 index.vue子组件…

第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子

编程实现&#xff1a; 小猫照镜子。(背景非源素材) 具体要求&#xff1a; 1). 运行程序&#xff0c;角色、背景如图所示&#xff1b; 完整题目可点击下方链接查看&#xff0c;支持在线编程~ 小猫照镜子_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/s…

React + TypeScript 实现数据库逆向生成数据模型指南

React TypeScript 实现数据库逆向生成数据模型全栈指南 引言&#xff1a;逆向工程在现代开发中的价值 在微服务架构和快速迭代的背景下&#xff0c;数据库逆向生成数据模型已成为提升开发效率的核心技术。传统手动编写模型的方式存在模式同步延迟和类型安全缺失两大痛点。本文…

Android Audio实战——音频相关基础概念(附)

Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…

小程序类目调整汇总公告

各位小程序开发者&#xff1a; 为进一步加强平台的规范管理&#xff0c;优化开发者类目选择体验&#xff0c;现对以下类目进行调整&#xff0c;请各位开发者知悉。 类目新增 非个人主体 #【交通服务-国际客运】 现资质要求 &#xff08;2选1&#xff09;&#xff1a; 1…

python的列表和元组别再傻傻分不清啦

目录 什么是下标&#xff1a; 正数索引&#xff1a;正数索引从左到右&#xff0c;从 0 开始。 负数索引&#xff1a;负数索引从右到左&#xff0c;从 -1 开始。 切片&#xff08;slice&#xff09;&#xff1a;除了单个元素&#xff0c;Python还支持通过切片访问序列的子集。…

dubbo转http方式调用

业务背景&#xff1a;在当前项目下&#xff0c;所有前端请求均通过外层网关转发到后端这边的dubbo服务&#xff0c;现计划去掉网关层&#xff0c;由前端直接http调用后端dubbo。 解决方案&#xff1a;在前端调用方式不变的前提下&#xff0c;后端服务新建controller层&#xf…

OpenHarmony构建系统实践-跨部件引用

上一篇通过gn构建系统利用部件构建了可执行程序、动态库和配置文件&#xff0c;以及部件内的引用&#xff0c;本篇通过实现跨部件的模块引用&#xff0c;通过实现部件间的使用方法&#xff0c;以此来达到复用三方部件和模块库的目的。 本节以实现两个自定义的部件为例&#xff…

在 compare-form.vue 中添加 compareDate 隐藏字段,并在提交时自动填入当前时间

在 compare-form.vue 中添加 compareDate 隐藏字段&#xff0c;并在提交时自动填入当前时间。 提交表单时存入的对象是FakeRegistration&#xff0c;这个对象里面有compareDate字段&#xff0c;刚好表格查询的对象也是FakeRegistration&#xff0c;所以表格展示的时间就是刚才…

Windows 11【1001问】如何安装Windows 11

紧接上篇内容&#xff0c;本文详细介绍了从准备工作到具体安装步骤的完整流程&#xff0c;帮助用户顺利完成Windows 11系统的安装。内容涵盖了ISO镜像文件的下载与校验、启动U盘的制作、硬件兼容性检查&#xff0c;以及BIOS/UEFI设置和系统安装过程中的关键步骤。通过逐步指导&…