您的位置:首页 > 编程语言 > Java开发

spring笔记——spirng aop切入点表达式

2016-08-01 17:48 260 查看
AspectJ切入点语言,是一种强大的表达式语言,能够匹配各种类型的连接点,但是spring Aop只支持在其IOC容器中声明的bean的方法执行连接点。

一、切入点表达式

①execution

使用“execution(方法表达式)”匹配方法执行;

示例:


任意公共方法的执行: execution(public
* *(..)) 
任何一个以“set”开始的方法的执行: execution(*
set*(..)) 
AccountService 接口的任意方法的执行: execution(*
com.xyz.service.AccountService.*(..)) 
定义在service包里的任意方法的执行: execution(*
com.xyz.service.*.*(..)) 
定义在service包或者子包里的任意方法的执行: execution(*
com.xyz.service..*.*(..)) 

②within

使用“within(类型表达式)”匹配指定类型内的方法执行;

示例:


在service包里的任意连接点(在Spring
AOP中只是方法执行) : within(com.xyz.service.*) 
在service包或者子包里的任意连接点(在Spring AOP中只是方法执行) : within(com.xyz.service..*) 

③this

使用“this(类型全限定名)”用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也可以类型匹配;

示例:


实现了
AccountService 接口的代理对象的任意连接点(在Spring AOP中只是方法执行) : this(com.xyz.service.AccountService) 

④target

使用“target(类型全限定名)”用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就包括引入接口也类型匹配;

示例:


实现了
AccountService 接口的目标对象的任意连接点(在Spring AOP中只是方法执行) : target(com.xyz.service.AccountService) 

⑤args

使用“args(参数类型列表)”匹配当前执行的方法传入的参数为指定类型的执行方法

示例:
任何一个只接受一个参数,且在运行时传入的参数实现了
Serializable 接口的连接点 (在Spring AOP中只是方法执行) :args(java.io.Serializable) 

⑥@target

使用“@args(注解列表)”用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;

示例:

有一个
@Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行) :@target(org.springframework.transaction.annotation.Transactional) 

⑦@within

使用“@within(注解类型)”用于匹配所以持有指定注解类型内的方法

示例:


任何一个目标对象声明的类型有一个
@Transactional 注解的连接(在Spring AOP中只是方法执行):@within(org.springframework.transaction.annotation.Transactional) 

⑧@annotation

使用“@annotation(注解类型)”用于匹配当前执行方法持有指定注解的方法;

示例:


任何一个执行的方法有一个
@Transactional annotation的连接点(在Spring AOP中只是方法执行):@annotation(org.springframework.transaction.annotation.Transactional) 

⑨@args

使用“@args(注解列表)”用于匹配当前执行的方法传入的参数持有指定注解的执行;

示例:

任何一个接受一个参数,并且传入的参数在运行时的类型实现了
@Classified annotation的连接点(在Spring AOP中只是方

法执行)
:@args(com.xyz.security.Classified)


⑩bean

使用“bean(名字通配符)”匹配特定名称的Bean对象的执行方法

示例:
匹配所有以Service命名(id或name)结尾的Bean : bean(*Service)

二、组合表达式
组合切入点表达式 AspectJ使用 且(&&)、或(||)、非(!)来组合切入点表达式。在Schema风格下,由于在XML中使用“&&”需要使用转义字符“&&”来代替之,所以很不方便,因此Spring ASP 提供了and、or、not来代替&&、||、!。

示例:
action包及其子包中的方法且方法持有@AddLog注解
<aop:pointcut id="logAction"
expression="execution(* com.siweidg..action.*.*()) 
    and @annotation(com.siweidg.comm.annotation.AddLog)" />

参考博客:http://www.cnblogs.com/yudy/archive/2012/03/22/2411175.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: