Spring AOP 中@Pointcut的用法

@Pointcut注解 首先,定义一个切面类,并使用@Pointcut注解定义切入点表达式。// 定义一个切入点表达式,匹配所有在com.example.service包及其子包中的方法 @Pointcut("execution(* com.example.service..*(..))") public void serviceLayer() {// 方法体可以为空,因为这个方法只是一个标识,用于定义切入点表达式 } } 阅读详情

格式:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?) 

括号中各个pattern分别表示:

  • 修饰符匹配(modifier-pattern?)
  • 返回值匹配(ret-type-pattern)可以为*表示任何返回值,全路径的类名等
  • 类路径匹配(declaring-type-pattern?)
  • 方法名匹配(name-pattern)可以指定方法名 或者 *代表所有, set* 代表以set开头的所有方法
  • 参数匹配((param-pattern))可以指定具体的参数类型,多个参数间用“,”隔开,各个参数也可以用“*”来表示匹配任意类型的参数,如(String)表示匹配一个String参数的方法;(*,String) 表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;可以用(..)表示零个或多个任意参数
  • 异常类型匹配(throws-pattern?)
  • 其中后面跟着“?”的是可选项

现在来看看几个例子:

1)execution(* *(..))  
//表示匹配所有方法  
2)execution(public * com. savage.service.UserService.*(..))  
//表示匹配com.savage.server.UserService中所有的公有方法  
3)execution(* com.savage.server..*.*(..))  
//表示匹配com.savage.server包及其子包下的所有方法 

在Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature)

//Pointcut表示式
@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
//Point签名
private void log(){} 
然后要使用所定义的Pointcut时,可以指定Pointcut签名
如下:
@Before("og()")

这种使用方式等同于以下方式,直接定义execution表达式使用

@Before("execution(* com.savage.aop.MessageSender.*(..))")

Pointcut定义时,还可以使用&&、||、! 这三个运算

@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
private void logSender(){}

@Pointcut("execution(* com.savage.aop.MessageReceiver.*(..))")
private void logReceiver(){}

@Pointcut("logSender() || logReceiver()")
private void logMessage(){}

这个例子中,logMessage()将匹配任何MessageSender和MessageReceiver中的任何方法。


还可以将一些公用的Pointcut放到一个类中,以供整个应用程序使用,如下:

package com.savage.aop;

import org.aspectj.lang.annotation.*;

public class Pointcuts {
@Pointcut("execution(* *Message(..))")
public void logMessage(){}

@Pointcut("execution(* *Attachment(..))")
public void logAttachment(){}

@Pointcut("execution(* *Service.*(..))")
public void auth(){}
}

在使用上面定义Pointcut时,指定完整的类名加上Pointcut签名就可以了,如:

package com.savage.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

@Aspect
public class LogBeforeAdvice {
@Before("com.sagage.aop.Pointcuts.logMessage()")
public void before(JoinPoint joinPoint) {
System.out.println("Logging before " + joinPoint.getSignature().getName());
}
}

当基于XML Sechma实现Advice时,如果Pointcut需要被重用,可以使用<aop:pointcut></aop:pointcut>来声明Pointcut,然后在需要使用这个Pointcut的地方,用pointcut-ref引用就行了,如:

<aop:config>
  <aop:pointcut id="log" expression="execution(* com.savage.simplespring.bean.MessageSender.*(..))"/>
  <aop:aspect id="logging" ref="logBeforeAdvice">
    <aop:before pointcut-ref="log" method="before"/>
    <aop:after-returning pointcut-ref="log" method="afterReturning"/>
  </aop:aspect>
</aop:config>

 
 

另外,除了execution表示式外,还有within、this、target、args等Pointcut表示式

大鹏激光

AOP-4.1-Spring @Pointcut使用 在Spring中,使用@Pointcut可以用来定义切点,也就是要切哪些方法。这里容易混淆的是this和target的使用,this是在运行时去比对最终的代理对象是否和表达式定义的类型是否匹配,这个处理要等到运行时才能完成。而target是直接根据表达式定义找出类型,这个处理在编译器就能完成。 阅读详情

相关推荐

spring---@Pointcut表达式

cn.javass包及所有子包下IPointcut前缀类型的的以test开头的只有一个参数类型为java.util.Date的方法,注意该匹配是根据方法签名的参数类型进行匹配的,而不是根据执行时传入的参数类型决定的。任何一个以接受“传入参数类型为 java.io.Serializable” 开头,且其后可跟任意个任意类型的参数的方法执行,args指定的参数类型是在运行时动态匹配的。任何带有一个参数的方法,且传入的参数类型是有一个泛型参数,该泛型参数类型是HashMap的基类型;将不匹配,必须使用“* *(

lipviolet的博客 1277

【注解】@Pointcut

在 Spring AOP 中,切入点定义了哪些方法应该被拦截(即哪些方法会被增强)。一般来说,切入点可以使用表达式来指定,表达式会匹配到需要被拦截的方法。用于定义切入点,而切入点表达式指定了哪些方法会被拦截。一旦定义了切入点,你可以在通知中引用它,从而在匹配到的方法执行前后执行额外的逻辑。是 Spring AOP(面向切面编程)中的一个注解,用于定义一个切入点(Pointcut)。方法就会在匹配到的方法执行之前被调用。然后,你可以在通知(例如。

qq_35350487的博客 6303

Spring AOP @Pointcut表达式12种核心用法与实战避坑指南

面向切面编程(AOP)是Spring框架实现横切关注点(如日志、事务、权限校验)的核心技术,其本质是通过代理模式在程序运行时动态地将额外逻辑织入到特定连接点。@Pointcut表达式作为AOP的“选择器”,定义了哪些方法需要被拦截,其精准性直接决定了切面的性能与正确性。在工程实践中,开发者需要掌握从基础的execution、within匹配,到基于注解的@annotation、@target等高级用法,并能通过逻辑运算符组合它们以应对复杂业务场景。本文聚焦@Pointcut的12种核心武器,结合日志记录、事

weixin_34290096的博客 551

@Pointcut语法详解

@Pointcut语法详解 目录 @Pointcut语法详解 定义 表达式标签 execution execution格式: 例子: AspectJ类型匹配的通配符: within和@within this @target @annotation args 和 @args 命名及匿名切入点 切入点使用示例: 通知参数 AOP例子 定义 格式:@ 注解(v...

justlpf的专栏 4万+

从ATE到ATPG:基于Scan Chain的芯片制造缺陷定位实战解析

本文深入解析了从ATE到ATPG的芯片制造缺陷定位实战技术,重点介绍了Scan Chain的工作原理、异步复位触发器处理技巧以及Design Compiler中的DFT实现方法。通过实际案例展示了如何利用ATE测试数据和ATPG工具进行精确的缺陷定位,并分享了提升测试覆盖率和优化测试成本的专业技巧,为芯片测试工程师提供了宝贵的实战经验。

weixin_42527160的博客 380

Cesium实战:全球海洋动态水面与自定义区域波浪效果实现

本文详细介绍了在Cesium中实现全球海洋动态水面与自定义区域波浪效果的实战方法。通过解析核心概念Primitive与Geometry,并深入讲解Water材质的关键参数调节,指导开发者快速创建逼真的动态海洋。文章重点阐述了如何利用多边形坐标定义不规则图形区域,实现精准的局部水域波浪效果,并提供了性能优化与视觉提升的实用技巧。

weixin_29256771的博客 501

Spring AOP 中 @Pointcut的用法

Spring AOP 中 @Pointcut的用法: execution (modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?) 括号中pattern分别表示: 1、修饰符匹配(modifier-pattern?) 2、返回值匹配(ret-typ...

蜡笔小浪的博客 727

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 184

SpringAOP专题之6、Spring AOP中@Pointcut 12种用法

本文主要内容:掌握@Pointcut的12种用法。 Aop相关阅读 阅读本文之前,需要先掌握下面几篇篇文章内容,不然会比较吃力。 代理详解(java动态代理&CGLIB代理) jdk动态代理和cglib代理 Aop概念详解 AOP核心源码、原理详解 ProxyFactoryBean创建AOP代理 本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:Aspe...

优快云_KONGlX的博客 1609

【backtrader保姆级教学】投资组合回测

method1:探索投资组合的最有方案,使用蒙特卡洛模拟Markowitz模型。# 提取最小波动组合对应的权重, 并转换成Numpy数组。# 绘制收益-标准差的散点图,并用颜色描绘夏普比率。# 在收益-风险散点图中突出风险最小的点。:param any_day: 任意日期。# 将该点坐标显示在图中并保留四位小数。password = “替换密码”# 找到标准差最小数据的索引值。user = “替换账号”# 计算GMV投资组合收益。# 计算每项资产的夏普比率。# 设置无风险回报率为0。

weixin_38132951的博客 2315

【论文阅读】2021-(Pidinet)Pixel Difference Networks for Efficient Edge Detection

文章目录摘要1. Introduction 摘要 motivations: 基于CNN的边缘检测的高性能是通过一个大的预训练CNN主干来实现的,该主干占用大量内存和能量。传统边缘检测器(如Canny、Sobel和LBP)很少被研究。 contributions: 提出了一种简单、轻量级但有效的架构,称为像素差分网络(PiDiNet),用于有效的边缘检测。PiDiNet采用了新颖的像素差卷积,将传统的边缘检测算子集成到现代CNN中流行的卷积运算中,以增强任务性能。 experiments: 在BSDS500

轻舟的万重重山 1万+

Spring Aop中@Pointcut用法

格式: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?) //表示匹配所有方法 1)execution(* *(..)) //表示匹配com.savage.server.UserService中所...

只为成功找方法 不为失败找借口 1178

保姆级教程:在Ubuntu 20.04上搞定PX4飞控与T265的视觉定位(附避坑指南)

本文提供在Ubuntu 20.04上配置PX4飞控与T265视觉定位系统的详细教程,涵盖驱动安装、ROS与MAVROS桥接、PX4参数调优及故障排查。通过实测验证的步骤和避坑指南,帮助开发者实现厘米级精度的视觉定位,特别适合室内无人机应用。

weixin_29038155的博客 248

Spring AOP中@Pointcut的用法,注解开发AOP

Spring AOP中@Pointcut的用法,注解开发AOP 首先在xml中开启注解支持 <!--开启AOP的注解支持--> <aop:aspectj-autoproxy/> 举例,环绕通知 创建一个切点类,com.spring.service下及其子包所有方法进行匹配 public class AopPointcutClass { @Pointcut("execution(* com.spring.service..*(..))") public v

gaoshan12345678910的博客 817

MATLAB基础应用精讲-【图像处理】GNN图神经网络(附python代码实现)

图神经网络由于其在处理非欧空间数据和复杂特征方面的优势,受到广泛关注并应用于推荐系统、知识图谱、交通道路分析等场景。图结构可描述复杂关系,如基因结构、通信网络、交通路线、社交网络等。图计算挖掘结构信息,但无法学习节点特征。神经网络在欧氏空间数据上表现优越,但无法直接应用于非欧氏空间的图数据。图神经网络结合图计算和神经网络优势,处理非欧氏空间数据及其复杂特征,应用于网络链接预测、推荐系统和交通道路分析等场景。实际应用中,图数据规模庞大,如百亿级节点、千亿级边,存储开销超过10TB。

qq_36130719的博客 1139

MimicKit 人形机器人强化学习全身模仿控制算法使用教程

本文介绍了MimicKit运动模仿算法框架的使用指南。主要内容包括:1)安装IsaacGym和依赖项;2)训练模型命令及参数说明;3)测试模型的方法;4)分布式训练配置;5)使用TensorBoard可视化日志;6)动作数据格式说明。该框架支持DeepMimic、AMP、ASE、ADD等算法,包含PPO、AWR等强化学习算法,适用于物理仿真角色动画控制研究。

机器人控制与仿真应用 1201

Spring AOP @Pointcut 12种核心用法详解:从基础语法到实战进阶

面向切面编程(AOP)是一种强大的编程范式,它通过将横切关注点(如日志、事务、安全)与核心业务逻辑分离,显著提升了代码的模块化和可维护性。其核心原理是在程序执行的特定“连接点”动态植入增强逻辑,而实现这一精准控制的关键在于“切入点”表达式。在Spring AOP框架中,@Pointcut注解及其表达式语言正是定义这些切入点的核心技术,它允许开发者以声明式的方式,精细地描述需要拦截的方法、注解、参数乃至异常。掌握@Pointcut的丰富用法,对于构建高内聚、低耦合的企业级应用至关重要,能够广泛应用于性能监控、

weixin_30239339的博客 348

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: java web跨域拦截访问,多个域
下一篇: Class.forName()和ClassLoader.loadClass 的区别
冷down
博客等级 码龄10年 11粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值