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. JavaEEB2C网上商城前端系统

    问题的提出: 电子商务已经成为人们生活中不可或缺的组成部分,它提供了一种足不出户就可以挑选.购买.使用商品的方式.在众多点上网站中,综合类的B2C电商以其较高的可信度,丰富的商品类目,得到消费者的青睐 ...

  2. ASP.NET WebForm / MVC 源码分析

    浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送 ...

  3. mac开启22port

    mac开启22port 选择System prefrence -> sharing , 将remote login打开 測试是否打开 import socket s = socket.socke ...

  4. Thread.join()分析方法

    API: join public final void join() throws InterruptedException 等待该线程终止. 抛出: InterruptedException - 假 ...

  5. silverlight 和winform的结合使用

    silverlight 和winform的结合使用比较简单,将silverlight承载在页面上,页面运行在winform上的webbrowser中即可. 这样的情况下,我没找到页面中silverli ...

  6. android对app代码混淆

    接到新任务.现有项目的代码混淆.在此之前混淆了一些理解,但还不够具体和全面,我知道有些东西混起来相当棘手. 但幸运的是,现在这个项目是不是太复杂(对于这有些混乱).提前完成--这是总结. 第一部分 介 ...

  7. 採訪The Molasses Flood:BioShock Infinite 游戏之后又一大作

    Xsolla有幸与Flame in the Flood游戏的开发人员之中的一个-----Forrest Dowling进行了採訪,Flame in the Flood这款非常棒的游戏在Kickstar ...

  8. 【剑指offer】删除字符也出现在一个字符串

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27110873 剑指offer上的字符串相关题目. 题目:输入两个字符串,从第一字符串中删除 ...

  9. chrome主页被篡改为360该溶液的导航

    昨天,安装游戏后,,发现chrome该主页被篡改为360导航. 进入chrome设置更改主页,再次启动chrome或360导航,后来头发今天chrome快捷方式目标再加上一堆的属性后面360网站导航, ...

  10. Oracle生成查询包括对应于所有数据表记录语句中指定的字段名

    应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...