跟我学aspectj之四 ----- pointcut基础语法

原创 2012年06月18日 17:09:09

一、aspect的定义

   运行完HelloWorld以后,我们来看下aspect的基础语法:

1、定义一个切面: 关键字aspect。 这定义Java类的语法类似。

2、定义pointcut:  [修饰符(public,protected.....)] pointcut  poincut名字() :  表达式;

3、定义advice:   通知类型() : pointcut名字(){ .......逻辑}


   一个最基本的aspect,就是这样组成的。值得一提的是:aspectj支持很多类型的pointcut,最基本的就是method call pointcut(方法级别),而Spring的aop 仅支持method call pointcut。所以,在后面陆续的使用中,你将会发现aspectj的强大, 简直强大到有点过分。而至于advice,aspectj也一样,就是5种类型。




二、pointcut的主要类型

Methods and Constructors
call(Signature) every call to any method or constructor matching Signature at the call site(方法和构造函数的调用点)
execution(Signature) every execution of any method or constructor matching Signature (方法和构造函数的执行点)
Fields
get(Signature) every reference to any field matching Signature   (属性的读操作)
set(Signature) every assignment to any field matching Signature. The assigned value can be exposed with anargs pointcut (属性的写操作)
Exception Handlers
handler(TypePattern) every exception handler for any Throwable type in TypePattern. The exception value can be exposed with anargs pointcut(异常处理执行)
Advice
adviceexecution() every execution of any piece of advice(Advice执行)
Initialization
staticinitialization(TypePattern) every execution of a static initializer for any type in TypePattern  (类初始化)
initialization(Signature) every initialization of an object when the first constructor called in the type matchesSignature, encompassing the return from the super constructor call to the return of the first-called constructor (对象初始化)
preinitialization(Signature) every pre-initialization of an object when the first constructor called in the type matchesSignature, encompassing the entry of the first-called constructor to the call to the super constructor (对象预先初始化)
Lexical
within(TypePattern) every join point from code defined in a type in TypePattern  (捕获在指定类或者方面中的程序体中的所有连接点,包括内部类)
withincode(Signature) every join point from code defined in a method or constructor matching Signature (用于捕获在构造器或者方法中的所有连接点,包括在其中的本地类)
Instanceof checks and context exposure
this(Type or Id) every join point when the currently executing object is an instance of Type orId's type(所有Type or id 的实例的执行点,匹配所有的连接点,如方法调用,属性设置,当前的执行对象为Account,或者其子类。)
target(Type or Id) every join point when the target executing object is an instance of Type orId's type (配所有的连接点,目标对象为Type或Id)
args(Type or Id, ...) every join point when the arguments are instances of Types or the types of theIds (参数类型为Type)
Control Flow
cflow(Pointcut) every join point in the control flow of each join point P picked out byPointcut, including P itself  (捕获所有的连接点在指定的方法执行中,包括执行方法本身)
cflowbelow(Pointcut) every join point below the control flow of each join point P picked out byPointcut; does not include P itself (捕获所有的连接点在指定的方法执行中,除了执行方法本身)
Conditional
if(Expression) every join point when the boolean Expression is true
Combination (逻辑/结合操作)
! Pointcut every join point not picked out by Pointcut
Pointcut0 && Pointcut1 each join point picked out by both Pointcut0 and Pointcut1
Pointcut0 || Pointcut1 each join point picked out by either Pointcut0 or Pointcut1
( Pointcut ) each join point picked out by Pointcut

   

     前面说过pointcut基于正则的语法,那么肯定也支持通配符,含义如下:


* 表示任何数量的字符,除了(.)
.. 表示任何数量的字符包括任何数量的(.)
+ 描述指定类型的任何子类或者子接口
同java一样,提供了一元和二元的条件表达操作符。
一元操作符:!
二元操作符:||和&&
优先权同java

版权声明:本文为博主原创文章,未经博主允许不得转载。

学习记录 - AspectJ介绍以及Pointcut注解应用

@AspectJ的风格类似纯java注解的普通java类 Spring可以使用AspectJ来做切入点解析 AOP的运行时仍旧是纯的Spring AOP,对AspectJ的编译器或者织入无依赖性 ...

关于AspectJ 中的pointcut 语法

转自:http://blog.sina.com.cn/s/blog_6a0e23b90100s485.html pointcut,切点,辨认切点执行自己指定的动作 基础的解说如...

spring AOP pointcut 详细用法

1.首先这是我几天来对切面的编程的理解,之前有稍微学了下 spring切面的编程,spring中事物处理常常与pointcut相结合。 pointcut的注解类型 我就不多说了 。具体可以看sprin...

Spring4 AOP详解

Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解。所以这章主要从三个方面详解AOP:AOP简介(...

spring AOP

在软件开发中,分布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑之中)。将这些横切关注点与业务逻辑相分离是面向切面编程(AOP)...

【框架】[Spring]AOP拦截-使用切点:AspectJExpressionPointcut-切点语言

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 用AspectJExpressionPointcut实现的切点比JdkRegexpM...

跟我学aspectj之七 ----- call,execution,within,withincode

本节开始,我们将详细介绍pointcut的语法 一、call和execution    语法结构:execution([修饰符] 返回值类型 方法名(参数) [异常模式])  蓝色表示可选部分...

Spring AOP中pointcut expression表达式解析

Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. arg...
  • kkdelta
  • kkdelta
  • 2012年04月09日 17:36
  • 124604

PointCut语法介绍

pointcut ,从字面的意思说的是切面的意思。也就是横切的时候,会有哪些执行点会被识别。只有先识别了,才能执行相应的Advice。基本的定义如下:public pointcut accountOp...
  • mypop
  • mypop
  • 2011年01月11日 16:29
  • 2206

AspectJ语法详解:execution,within,this,@Aspect

6.5.1  Spring AOP支持的AspectJ切入点指示符        切入点指示符用来指示切入点表达式目的,,在spring AOP中目前只有执行方法这一个连接点,Spring AO...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我学aspectj之四 ----- pointcut基础语法
举报原因:
原因补充:

(最多只允许输入30个字)