@Pointcut的用法

@Pointcut注解 首先,定义一个切面类,并使用@Pointcut注解定义切入点表达式。// 定义一个切入点表达式,匹配所有在com.example.service包及其子包中的方法 @Pointcut("execution(* com.example.service..*(..))") public void serviceLayer() {// 方法体可以为空,因为这个方法只是一个标识,用于定义切入点表达式 } } 阅读详情
在Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature)。让我们先看看execution表示式的格式:
括号中各个pattern分别表示修饰符匹配(modifier-pattern?)、返回值匹配(ret-type-pattern)、类路径匹配(declaring-type-pattern?)、方法名匹配(name-pattern)、参数匹配((param-pattern))、异常类型匹配(throws-pattern?),其中后面跟着“?”的是可选项。
在各个pattern中可以使用“*”来表示匹配所有。在(param-pattern)中,可以指定具体的参数类型,多个参数间用“,”隔开,各个也可以用“*”来表示匹配任意类型的参数,如(String)表示匹配一个String参数的方法;(*,String)表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;可以用(..)表示零个或多个任意参数。
现在来看看几个例子:
1)execution(* *(..))
表示匹配所有方法
2)execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3)execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
除了execution表示式外,还有within、this、target、args等Pointcut表示式。一个Pointcut定义由Pointcut表示式和Pointcut签名组成,例如:
java 代码
  1. execution(modifier-pattern?
  2. ret-type-pattern
  3. declaring-type-pattern?
  4. name-pattern(param-pattern)
  5. throws-pattern?)

java 代码
  1. //Pointcut表示式
  2. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
  3. //Point签名
  4. private void log(){} 然后要使用所定义的Pointcut时,可以指定Pointcut签名,如
    上面的定义等同与:

java 代码
  1. @Before("og()")

java 代码
  1. @Before("execution(* com.savage.aop.MessageSender.*(..))")

Pointcut定义时,还可以使用&&、||、!
运算,如:
java 代码
  1. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
  2. private void logSender(){}

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

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

这个例子中,logMessage()将匹配任何MessageSender和MessageReceiver中的任何方法。
还可以将一些公用的Pointcut
放到一个类中,以供整个应用程序使用,如:
java 代码
  1. package com.savage.aop;

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

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

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

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

在使用这些Pointcut时,指定完整的类名加上Pointcut
签名就可以了,如:
java 代码
  1. package com.savage.aop;

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

  4. @Aspect
  5. public class LogBeforeAdvice {
  6. @Before("com.sagage.aop.Pointcuts.logMessage()")
  7. public void before(JoinPoint joinPoint) {
  8. System.out.println("Logging before " + joinPoint.getSignature().getName());
  9. }
  10. }
当基于XML Sechma实现Advice时,如果Pointcut需要被重用,可以使用<aop:pointcut></aop:pointcut>来声明Pointcut,然后在需要使用这个Pointcut的地方,用pointcut-ref引用就行了,如:
xml 代码
  1. <aop:config>
  2. <aop:pointcut id="log"
  3. expression="execution(* com.savage.simplespring.bean.MessageSender.*(..))"/>
  4. <aop:aspect id="logging" ref="logBeforeAdvice">
  5. <aop:before pointcut-ref="log" method="before"/>
  6. <aop:after-returning pointcut-ref="log" method="afterReturning"/>
  7. </aop:aspect>
  8. </aop:config>

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

相关推荐

AOP-4.1-Spring @Pointcut使用

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

诗人不写诗 1297

Spring AOP中pointcut expression表达式解析

Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. args() @args() execution() this() target() @target() within() @within() @annotation 其中executio

交换一个思想,能得到俩思想 16万+

全国各省份影像下载地址(11级别)

cesium中使用urltemplate加载,leaflet中使用tile加载,具体加载有问题可以给我留言。

资深三维GIS开发 5139

Spring系列第34篇:@Aspect中@Pointcut 12种用法

本文主要内容:掌握@Pointcut的12种用法。Aop相关阅读阅读本文之前,需要先掌握下面3篇文章内容,不然会比较吃力。Spring系列第15篇:代理详解(java动态代理&C...

路人甲Java 8923

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4815

科研党必看!Zotero+Claude3插件实战:如何用AI高效阅读文献(附详细配置步骤)

本文详细介绍了如何通过Zotero与Claude3插件的深度整合,实现科研文献的高效阅读与管理。从环境配置到核心功能实战,包括智能摘要生成、精准学术翻译和论文写作辅助等,帮助科研人员大幅提升工作效率。特别适合需要处理大量文献的研究者使用。

o0p1q2r3的博客 430

springboot aop @Pointcut 的 12 种用法

springboot aop @Pointcut 的 12 种用法

g470641382的博客 2293

huggingface使用git上传model或者Dataset到HF,当然也可以上传代码,以及大文件,很哇塞!!!

huggingface使用git上传model或者Dataset到HF,当然也可以上传代码,以及大文件,很哇塞!!! 第一次使用时,需要使用设置系统全局的huggingface token,这。点击huggingface首页右上角的头像 → settings → access tokens,创建一个write权限的token,名字可以随便取。

拥抱具身智能,昇腾Ascend C 3104

注解用法_@Pointcut 的 12 种用法,你知道几种?

本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在spring环境中实现aop特别的方便。而AspectJProxyFactory这个类可以通过解析@Aspect标注的类来生成代理aop代理对象,对开发者来说,使创建代理变得更简洁了。先了解几个概念文中...

weixin_39581652的博客 3303

CODESYS无扰切换PID(ST源代码)

/运行信号//手自动切换//设置值、目标值yk : REAL;// 实际值、反馈信号;// 开环给定值;// 比例增益;// 积分时间 单位S;Td : REAL;// 微分时间 单位S;//采样时间 单位S// 滤波时间 单位S;//中断周期 默认10msEND_VARVAR_OUTPUT//uk : REAL;//控制器输出;//上一时刻的实际值;uDk : REAL;

RXXW_Dor的博客 1400

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

@Pointcut 的 12 种用法,你知道几种?

@Pointcut的12种用法,案例

qq_35757473的博客 7661

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1897

34.@Aspect中@Pointcut 12种用法

格式:@ 注解(value=“表达标签 (表达式格式)”)如:@Inherited@InheritedS12Parent为父类,内部定义了2个方法,2个方法上都有@Ann12注解S12是代理的目标类,也是S12Parent的子类,内部重写了m2方法,重写之后m2方法上并没有@Ann12注解,S12内部还定义2个方法m3和m4,而m3上面有注解@Ann12@Ann12。

老徐的博客 184

使用 IMDb API 获取电影评分和评论的 Python 爬虫

电影是人们娱乐生活中的重要组成部分,随着电影产业的快速发展,观众对电影的评价也越来越多样化。IMDb(互联网电影数据库)作为全球最大的电影评分和评论平台之一,收录了成千上万部电影、电视节目及其相关数据。它提供了一个强大的 API 接口,允许开发者访问电影的评分、评论、演员信息等数据。本文将带你一步一步实现一个 Python 爬虫,使用 IMDb API 获取电影的评分和评论。我们将通过这个爬虫来分析一些热门电影的观众反馈,并可视化分析结果。

2201_76125261的博客 1054

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

@pointcut execution表达式_@Pointcut 的 12 种用法,你知道几种?

本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在spring环境中实现aop特别的方便。而AspectJProxyFactory这个类可以通过解析@Aspect标注的类来生成代理aop代理对象,对开发者来说,使创建代理变的更简洁了。先了解几个概念文中...

weixin_39681171的博客 7405

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring系列之@Aspect中@Pointcut 12种用法

先了解几个概念 文中会涉及几个概念,先了解一下。 target 用来表示目标对象,即需要通过aop来增强的对象。 proxy 代理对象,target通过aop增强之后生成的代理对象。 AspectJ AspectJ是什么? AspectJ是一个面向切面的框架,是目前最好用,最方便的AOP框架,和spring中的aop可以集成在一起使用,通过Aspectj提供的一些功能实现aop代理变得非常方便。 AspectJ使用步骤 1.创建一个类,使用@Aspect标注 2.@Aspect标注的类

azhou的代码园 2399

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

@Aspect中@Pointcut 12种用法

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

qq_43842093的博客 3605

Spring AOP 中@Pointcut的用法

Spring Aop中@pointCut的用法,格式:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)pattern分别表示: 修饰符匹配(modifier-pattern?) ...

dianbiao3588的博客 121

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

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

优快云_KONGlX的博客 1609

@param注解的用法解析_@Pointcut 的 12 种用法,你知道几种?

本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在spring环境中实现aop特别的方便。而AspectJProxyFactory这个类可以通过解析@Aspect标注的类来生成代理aop代理对象,对开发者来说,使创建代理变得更简洁了。先了解几个概念文中...

weixin_39524439的博客 568
上一篇: 使用itext导出word文档
下一篇: java ==和equals比较
Java18
博客等级 码龄16年 27粉丝 18原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值