为什么80%的码农都做不了架构师?>>>   

Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的.
Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. 
args()
@args()
execution()
this()
target()
@target()
within()
@within()
@annotation
其中execution 是用的最多的,其格式为:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
returning type pattern,name pattern, and parameters pattern是必须的.
ret-type-pattern:可以为*表示任何返回值,全路径的类名等.
name-pattern:指定方法名,*代表所以,set*,代表以set开头的所有方法.
parameters pattern:指定方法参数(声明的类型),(..)代表所有参数,(*)代表一个参数,(*,String)代表第一个参数为任何值,第二个为String类型.
举例说明:
任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包和所有子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

pointcutexp包里的任意类.
within(com.test.spring.aop.pointcutexp.*)
pointcutexp包和所有子包里的任意类.
within(com.test.spring.aop.pointcutexp..*)
实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类.
this(com.test.spring.aop.pointcutexp.Intf)
***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.

带有@Transactional标注的所有类的任意方法.
@within(org.springframework.transaction.annotation.Transactional)
@target(org.springframework.transaction.annotation.Transactional)
带有@Transactional标注的任意方法.
@annotation(org.springframework.transaction.annotation.Transactional)
***> @within和@target针对类的注解,@annotation是针对方法的注解

参数带有@Transactional标注的方法.
@args(org.springframework.transaction.annotation.Transactional)
参数为String类型(运行是决定)的方法.
args(String)
Pointcut 可以通过Java注解和XML两种方式配置,如下所示:

<aop:config>  <aop:aspectrefaop:aspectref="aspectDef">  <aop:pointcutidaop:pointcutid="pointcut1"expression="execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))"/>  <aop:before pointcut-ref="pointcut1" method="beforeAdvice" />  </aop:aspect>
</aop:config>  @Component
@Aspect
public class AspectDef {  //@Pointcut("execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")  //@Pointcut("within(com.test.spring.aop.pointcutexp..*)")  //@Pointcut("this(com.test.spring.aop.pointcutexp.Intf)")  //@Pointcut("target(com.test.spring.aop.pointcutexp.Intf)")  //@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")  //@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")  @Pointcut("args(String)")  public void pointcut1() {  }  @Before(value = "pointcut1()")  public void beforeAdvice() {  System.out.println("pointcut1 @Before...");  }  

转载于:https://my.oschina.net/skyzwg/blog/743623

Spring Aop pointcut expression表达式解析相关推荐

  1. Spring AOP中pointcut expression表达式解析 及匹配多个条件

    (* com.evan.crm.service.*.*(..))中几个通配符的含义: |第一个 * -- 通配 随便率性返回值类型|  |第二个 * -- 通配包com.evan.crm.servic ...

  2. Spring AOP中pointcut expression表达式解析

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...

  3. Spring AOP切面使用详细解析

    相关文章: SpringBoot AOP切面的使用 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析) 架构师系列内容:架构师学习笔记(持续更新)) Spring AOP 应 ...

  4. spring aop 注入源码解析

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  5. spring aop 注入源码解析 1

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  6. spring aop 中切面表达式规则

    spring AOP 可以通过两中方式配置: ①注解 (很简单) ②xml文件配置 这里通过说的通过xml 配置中的切面表达式 <!-- 配置事务切面 --> <aop:config ...

  7. Spring AOP Pointcut

    Pointcut 介绍 Pointcut,切入点,它的作用是去描述匹配AOP的另一个概念join point,它描述joint point 所在的包,包中类执行的方法等.通过它,Spring Aop ...

  8. spring aop抽取切点表达式

  9. Spring 中的切点表达式介绍

    Spring 中的切点表达式介绍 翻译原文链接 Introduction to Pointcut Expressions in Spring 1. 概述 在本教程中,我们将讨论 Spring AOP ...

最新文章

  1. 【建站系列教程】3.2、ajax使用精讲
  2. 使用GDI+缩放图片文件
  3. 基于 Quartz 开发企业级任务调度应用--转
  4. 2.2.5 调度算法:时间片轮转 优先级调度 多级反馈队列
  5. http 文件服务器 性能测试,Http File Server
  6. 爬虫技术前置准备工作 http url 请求方法 状态码 等等
  7. app运行租用服务器,app租用服务器
  8. linux 系统 指令lis,常用Linxu系统监控命令
  9. struts2:表单标签
  10. .NET性能优化方面的总结(转)
  11. python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
  12. yuzu 使用指南:如何在 PC 上运行 Switch 游戏
  13. php 数据库 编程,php数据库编程(mysql mysqli pdo)
  14. 【笔记】第2章 向量
  15. 残疾人求职阿里巴巴等了八年!好辛苦!
  16. Excel文档误删的4种恢复方法,1秒就可以还原所有内容,你用过吗
  17. Keras Tuner官方教程
  18. 大型网站架构演进历程
  19. 小程序上传文件到阿里云oss
  20. .nc地形数据的python转换实现tiff

热门文章

  1. Linux下清空回收站
  2. 关于学习新知识的一点想法
  3. 李洪强iOS经典面试题156 - Runtime详解(面试必备)
  4. csdn android视频播放器开发
  5. AsyncTask更新UI线程的基本原理
  6. Linux 基本权限管理
  7. 请确保此代码文件中定义的类与“inherits”属性匹配.并且该类扩展的基类(例如 Page 或 UserControl)是正确...
  8. java队列,ArrayBlockingQueue
  9. 大数据时代激活数据管理新思路
  10. 2012-2013年度大总结