Spring AOP在pointcut expression解析表达式 并匹配多个条件
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.*(..))
<aop:config>
<aop:pointcut expression="execution(* com.travelsky.ccboy.dao..*.find*(..))|| execution(* com.travelsky.ccboy.dao..*.query*(..))"
id="findCachePointcut" />
<aop:advisor advice-ref="jdbcInterceptor" pointcut-ref="findCachePointcut" />
</aop:config>
在多个表达式之间使用 ||,or表示 或,使用 &&,and表示 与,!
表示 非.
上面的代码也能够改写成
<aop:config>
<aop:pointcut expression="(execution(* com.travelsky.ccboy.dao..*.find*(..))) or(execution(* com.travelsky.ccboy.dao..*.query*(..)))"
id="findCachePointcut" />
<aop:advisor advice-ref="jdbcInterceptor" pointcut-ref="findCachePointcut" />
</aop:config>
注意上面两中方法的不同点出了 将 || 改成了 or ,还有就是 每一个execution都被()包括起来,建议为了区分不同的表达式 最好都是用()包装。
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两种方式配置,例如以下所看到的:
<bean id="bravemandao" class="com.test.dao.BraveManDao">
<property name="barveman" ref="braveman"></property>
</bean>
<bean id="braveman" class="com.test.bean.BraveMan"> </bean>
<bean id="minstrel" class="com.test.bean.Minstrel"></bean>
<aop:config>
<aop:aspect ref="minstrel">
<aop:pointcut expression="execution(* *.test(..))" id="say"/>
<aop:before pointcut-ref="say" method="singBeforeSay"/>
<aop:after pointcut-ref="say" method="singAfterSay"/>
</aop:aspect>
</aop:config>
package com.test.bean;
public class Minstrel {
public void singBeforeSay(){
System.out.println("before say!!!");
}
public void singAfterSay(){
System.out.println("after say!!!");
}
}
public class BraveManDao {
BraveMan braveman;
public BraveMan getBarveman() {
return braveman;
}
public void setBarveman(BraveMan braveman) {
this.braveman = braveman;
}
public void test(){
braveman.say();
}
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Spring AOP在pointcut expression解析表达式 并匹配多个条件的更多相关文章
- Spring AOP中pointcut expression表达式解析
Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...
- Spring AOP中pointcut expression表达式解析 及匹配多个条件
Spring中事务控制相关配置: <bean id="txManager" class="org.springframework.jdbc.datasource.D ...
- 转载《Spring AOP中pointcut expression表达式解析 及匹配多个条件》
原文地址:https://www.cnblogs.com/rainy-shurun/p/5195439.html 原文 Pointcut 是指那些方法需要被执行"AOP",是由&q ...
- Spring AOP 中pointcut expression表达式
原文地址——http://blog.csdn.net/qq525099302/article/details/53996344 Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut ...
- Spring AOP 中pointcut expression表达式解析及配置
Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut Expression”来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. ...
- Spring AOP中pointcut expression表达式
Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...
- Spring AOP中 pointcut expression表达式解析
任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...
- spring aop中pointcut表达式完整版
spring aop中pointcut表达式完整版 本文主要介绍spring aop中9种切入点表达式的写法 execute within this target args @target @with ...
- Spring AOP 中@Pointcut的用法
Spring Aop中@pointCut的用法,格式:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? nam ...
随机推荐
- 树形dp专辑
hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表 ...
- 二分图行列匹配---> hdu2119,hdu1498
hdu2119 题意:给定一个矩形方格,每个格子里面的数字是0或者1,每次操作可以把一整行或列的1变成0,问最少多少次操作能将1全部变为0 一次可以消除某一行或者某一列的1但是可以这么想,最多有多少个 ...
- UVA - 12232 Exclusive-OR (并查集扩展偏离向量)
Description You are not given n non-negative integersX0,X1,..., Xn-1 less than220, but they do exist ...
- CSS 初探
Css: 指层叠样式表 (Cascading Style Sheets),它是用来进行网页风格设计的.通俗的说就是进行网页美化的,没有html依然存在,多了css 它会更好.但是没有html,css就 ...
- 将ACCESS数据库迁移到SQLSERVER数据库
原文:将ACCESS数据库迁移到SQLSERVER数据库 将ACCESS数据库迁移到SQLSERVER数据库 ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 ...
- 丢弃重口味的xml配置--spring4用groovy配置bean(转)
spring4之前,bean的配置可以主要分为两种方式,一种是使用基于xml,个人非常讨厌这种方式,因为明明一件很简单的事,放在xml中就会多了不少繁杂的信息.另一种方式,是从spring3.0开始, ...
- MVC与三层架构
我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...
- jquery处理页面元素
处理父级页面中的元素 $(parent.document).find('#hidSendPerson').val(val);$(parent.document).find('#btnGo').clic ...
- 实现能够直接粘QQ贴截图的bug管理功能
对于一个功能强大的协作平台来说,todo管理和bug管理是不可缺少的功能.Todo和bug往往不是通过一些简单的文字就能实现的,有时候须要配以图片的说名,之前用过的项目管理平台都是以附件的形式上传图片 ...
- Shuttle ESB 实践
http://blog.csdn.net/liu765023051/article/category/2482069