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解析表达式 并匹配多个条件的更多相关文章

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

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

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

    Spring中事务控制相关配置: <bean id="txManager" class="org.springframework.jdbc.datasource.D ...

  3. 转载《Spring AOP中pointcut expression表达式解析 及匹配多个条件》

    原文地址:https://www.cnblogs.com/rainy-shurun/p/5195439.html 原文 Pointcut 是指那些方法需要被执行"AOP",是由&q ...

  4. Spring AOP 中pointcut expression表达式

    原文地址——http://blog.csdn.net/qq525099302/article/details/53996344 Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut ...

  5. Spring AOP 中pointcut expression表达式解析及配置

    Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut Expression”来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. ...

  6. Spring AOP中pointcut expression表达式

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

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

    任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...

  8. spring aop中pointcut表达式完整版

    spring aop中pointcut表达式完整版 本文主要介绍spring aop中9种切入点表达式的写法 execute within this target args @target @with ...

  9. Spring AOP 中@Pointcut的用法

    Spring Aop中@pointCut的用法,格式:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? nam ...

随机推荐

  1. NYOJ 47 河问题

    时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 在漆黑的夜里,N位旅行者来到了一座狭窄并且没有护栏的桥边.假设不借助手电筒的话,大家是不管怎样也不敢过桥去的.不幸的是 ...

  2. oracle转mysql总结(转)

    ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql. 现对转换过程中出现的问题及经验总结如下: 主键生成策略 创建一个专门记录 ...

  3. 原创游戏,金庸群侠传X 0.5公布

    首先说一下背景,我个人从小特别爱玩游戏,对小时候一款游戏<金庸群侠传>DOS版更是情有独钟,自己工作以后,利用业余时间自己整了一个原创的改编版丢网上(找图片.音乐.写剧情更是虐心之极,耗时 ...

  4. Google jsAPI托管你的js库

    来看一段JS: <script type="text/javascript" src="http://www.google.com/jsapi">& ...

  5. kNN(K-Nearest Neighbor)最近的分类规则

    KNN最近的规则,主要的应用领域是未知的鉴定,这一推断未知的哪一类,这样做是为了推断.基于欧几里得定理,已知推断未知什么样的特点和最亲密的事情特性: K最近的邻居(k-Nearest Neighbor ...

  6. SDL 简单入门学习

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 概要 实际学习使用SDL创建窗体,并绘制图形. 前言 今天想要做一个简单的demo ...

  7. bash组织成树数据结构

    君子也非独占,善假于物!bash也因此.昨天晚上,今天早上世界杯很精彩.晚上醒来看到不断地居住的电话.早上没有喝的水开始赞赏在英国和意大利的对决.也TM精彩,最后生下了罗马文化.意大利伊特鲁里亚文化获 ...

  8. asp.net使用mysql数据库

    Asp.net连接mysql 不推荐使用ODBC,推荐是用mysql官网提供的组件MySQL.Data.Dll,放在bin下面,添加引用即可 下面是封装的几个常用操作 using System; us ...

  9. 创建Material Design风格Android应用--自定义阴影和裁剪视图

    之前已经写过通过应用主题和使用ListView, CardView,应用Material Design样式,同一时候都都能够通过support library向下兼容.今天要写的阴影和视图裁剪.无法向 ...

  10. WIZnet通过启动在线培训活动:计算机网络TCP/IP协议而事实上,现在的方法

    为了给大家营造更好的学习环境.WIZnet特此举办第一期培训活动,由WIZnet一线project师为你分享最最前沿和有用的网络技术知识,帮你解答开发过程中的疑问.欢迎前来交流.名额有限(20名满), ...