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对象的执行方法
示例:
匹配所有以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
一、切入点表达式
①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
相关文章推荐
- SpringMVC后台程序接收ajax异步提交数据的实例
- 基于 Quartz 开发企业级任务调度应用
- Eclipse+EPIC+PadWalker
- 用Struts2搭建一个登录例子【本人亲测好用】
- javaMail2种方式实现,并读取html格式邮件模板
- 记录一下springmvc模版引擎配置
- java界面学习
- 程序中的@Override是什么意思?
- [Windows] win7 配置Java开发环境
- Ajax请求返回406 Not Acceptable
- java.lang.IllegalStateException: Make sure the Cursor is initialized correctly before accessing...
- [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC
- 用java语言写一封面向对象的代码情书
- Springmvc 解决相应中的乱码
- java-- 线程池
- JAVA 计算算式表达式
- RXjava的整合笔记
- struts2+ajaxSubmit+poi导入excel
- Struts2入门:框架结构、处理步骤、配置文件
- Java序列化与Hessian序列化的区别