原网站: http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html
在用切点描述了符合特定特征的程序块之后, 就可以用编译器定位到这些符合条件的代码段, 并对这些代码进行处理.
advice定义程序中切点部分的具体操作, 比如在切点前(后)插入代码, 或者替换切点代码,等等. advice由切点和操作组成.
AspectJ中的Advice主要有: before, after returning, after throwing, after,around .
before在到达切点之前运行advice中定义的操作.
after returning 在切点代码运行并取得返回值, 在程序控制流跳转至调用者之前执行操作.
after throwing 在切点代码运行并抛出指定异常, 在程序控制流跳转至调用者之前执行操作.
after 在切点运行之后, 且after returning 或者after throwing的操作执行之后(如果有的话), 在程序控制流跳转至调用者之前执行操作.
around 操作代替切点运行.
切点可以是预先定义的, 也可以是未定义的匿名切点. 例如:
pointcut setter(Point p1, int newval): target(p1) && args(newval)
(call(void setX(int) ||
call(void setY(int)));
before(Point p1, int newval): setter(p1, newval) {
System.out.println("About to set something in " + p1 +
" to the new value " + newval);
}
含有匿名切点的定义如下, 两者等价:
before(Point p1, int newval): target(p1) && args(newval)
(call(void setX(int)) ||
call(void setY(int))) {
System.out.println("About to set something in " + p1 +
" to the new value " + newval);
}