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两种方式配置,如下所示:
[html] view plaincopy
  1. <aop:config>  
  2.     <aop:aspectrefaop:aspectref="aspectDef">  
  3.         <aop:pointcutidaop:pointcutid="pointcut1"expression="execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))"/>  
  4.         <aop:before pointcut-ref="pointcut1" method="beforeAdvice" />  
  5.     </aop:aspect>  
  6. </aop:config>  
  7.   
  8. @Component  
  9. @Aspect  
  10. public class AspectDef {  
  11.     //@Pointcut("execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")  
  12.     //@Pointcut("within(com.test.spring.aop.pointcutexp..*)")  
  13.     //@Pointcut("this(com.test.spring.aop.pointcutexp.Intf)")  
  14.     //@Pointcut("target(com.test.spring.aop.pointcutexp.Intf)")  
  15.     //@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")  
  16.     //@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")  
  17.     @Pointcut("args(String)")  
  18.     public void pointcut1() {  
  19.     }  
  20.     @Before(value = "pointcut1()")  
  21.     public void beforeAdvice() {  
  22.         System.out.println("pointcut1 @Before...");  
  23.     }  
22

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/451458.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/451458.shtml
英文地址,请注明出处:http://en.pswp.cn/news/451458.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

restful风格使用小例

1. 页面传参数写法&#xff1a; http://write.blog.csdn.net/ 参数1 / 参数2 / 参数N restful风格是把参数 直接拼在 / 后面&#xff0c;而不是URL地址重写方式。 2. 后台接收用法&#xff1a;

Mac 10.12彻底关闭Dashboard

1、打开【系统偏好设置】。 2、点击进入【Mission Control】。 3、中间有一项【Dashboard】&#xff0c;点击它右边的下拉菜单&#xff0c;选择【关闭】&#xff0c;即可。 转载于:https://www.cnblogs.com/EasonJim/p/9547489.html

BHO插件操作IE浏览器,js调用C#方法

BHO是IE浏览器的扩展程序&#xff0c;全名Browser Helper Object&#xff0c;文件格式为DLL文件。可对IE浏览器的界面和访问内容进行修改操作。BHO只适用于IE浏览器&#xff0c;对其他任何浏览器都没有作用。&#xff08;引用自百度百科>_<&#xff09; 本示例实现的功能…

多线程读取文件File

Java代码 import java.io.*; class DownThread extends Thread { //定义字节数组&#xff08;取水的竹筒&#xff09;的长度 private final int BUFF_LEN 32; //定义读取的起始点 private long start; //定义读取的结束点 private long end; …

LeetCode-----翻转二叉树

题目——翻转二叉树 翻转一棵二叉树。 示例&#xff1a; 输入&#xff1a; 4/ \2 7/ \ / \ 1 3 6 9 输出&#xff1a; 4/ \7 2/ \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell 的 原问题 启发的 &#xff1a; 谷歌&#xff1a;我们90&#xff05;的工…

JAVA中字符串比较equals()和equalsIgnoreCase()的区别

1、使用equals( )方法比较两个字符串是否相等。它具有如下的一般形式&#xff1a; boolean equals(Object str) 这里str是一个用来与调用字符串&#xff08;String&#xff09;对象做比较的字符串&#xff08;String&#xff09;对象。如果两个字符串具有相同的字符和长度&…

Spring Boot 是什么,有什么用。

见&#xff1a;http://www.csdn.net/article/a/2016-05-12/15838098 maven/Java/web/bootstrap/dataTable/app开发QQ群&#xff1a;566862629。希望更多人一起帮助我学习。 首先&#xff0c;我们来看一下spring boot是什么&#xff0c;它帮助我们解决了哪些问题&#xff1a; …

纯html5+css3能写出什么惊人效果?

在搞清楚这个问题之前,我们得先弄清楚H5和css3有哪些惊人的特性首先我们来看下H5的新特性,canvas标签,多媒体标签(audio/video) 离线存储, 新的表单元素, 新的表单控件 地理定位等等,要说道惊人效果,其中canvas audio video 还有地理定位等就可以够玩一年 但题目中的一个纯字,一…

FPGA数据传输模块设计

摘要 FPGA适合于大量数据处理的应用&#xff0c;广泛应用于嵌入式系统。本文设计的FPGA模块需要对GPS、便携打印机和串口数据进行处理&#xff0c;将详细介绍如何设计FPGA和不同外设之间的数据传输。同时&#xff0c;在RTL编码中&#xff0c;编写使综合与布局布线效果更佳的代码…

java获取当前时间戳的方法

获取当前时间戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 获取当前时间 SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String date df.…

解决Linux 忘记root 密码的办法

今天突然遇到一个问题&#xff0c;那别人的 linux 系统发现root 密码竟然不知道&#xff0c;这就尴尬了。经过一番百度&#xff0c;记录下 如何修改root 密码 1&#xff1a;开机linxu 按E 键 2&#xff1a;继续按E 键 3:选择 kernel..... 按E 4&#xff1a;在rhgb quiet 后面加…

tomcat的class加载的优先顺序

来源&#xff1a;https://bbs.csdn.net/topics/80459833Tomcat的class加载的优先顺序一览 最先是$JAVA_HOME/jre/lib/ext/下的jar文件。环境变量CLASSPATH中的jar和class文件。\$CATALINA_HOME/common/classes下的class文件。\$CATALINA_HOME/commons/endorsed下的jar文件。\$C…

简单理解Hadoop(Hadoop是什么、如何工作)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Hadoop主要的任务部署分为3个部分&#xff0c;分别是&#xff1a;Client机器&#xff0c;主节点和从节点。主节点主要负责Hadoop两个…

JPA @Id 和 @GeneratedValue 注解详解

Id&#xff1a; Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前&#xff0c;可与声明语句同行&#xff0c;也可写在单独行上。 Id标注也可置于属性的getter方法之前。 GeneratedValue&#xff1a; GeneratedValue 用于标注主键的生…

Factorials 阶乘

Description N的阶乘写作N!表示小于等于N的所有正整数的乘积。阶乘会很快的变大&#xff0c;如13!就必须用32位整数类型来存储&#xff0c;70&#xff01;即使用浮点数也存不下了。你的任务是找到阶乘最后面的非零位。举个例子,5!1*2*3*4*5120所以5!的最后面的非零位是2&#x…

硬件模块设计思想

硬件模块设计">模块设计,顾名思义就是将各个不同的功能做成独立的模块。然后将各个模块组合成不同的产品。 对于一个公司硬件模块化设计,从设计之初,调试,到样机及产品生产的过程应该是这样&#xff1a; 1.     了解产品需求 2.     根据需求,选择合适的处理…

java中的lastIndexOf( )函数是什么意思

int x a.lastIndexOf(b),表示b字符串在a字符串中最后出现的位置。如 a "abcdabcd";b"d";那么x的值为7.

2 分钟读懂大数据框架 Hadoop 和 Spark 的异同

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 谈到大数据&#xff0c;相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上&#xff0c;并没有…

操作系统文件编程知识

文件的创建和读写 当我们需要打开一个文件进行读写操作的时候&#xff0c;我们可以使用系统调用函数open。使用完成以后我们调用另外一个close函数进行关闭操作。 该函数使用的头文件如下&#xff1a; #include <fcntl.h> #include <unistd.h> #include <sys/ty…

论述HTML5平台的若干重要特性

开发者已凭借网页技术制作出创收丰厚的游戏作品许多年&#xff1a;《部落战争》凭借静态网页页面大获成功&#xff0c;《Farmville》凭借Flash开拓出新的疆域。但如今越来越多人觉得&#xff0c;未来HTML5将变成游戏的主要平台。为什么HTML5如此颇具趣味&#xff0c;它是否真的…