基于Annotation与基于XmlSchema的AOP其实是对代理过程的一个简化。
需要引包:asm-X.jar,asm-commons-X.jar,aspectjweaver.jar。
基于Annotation可以有3中声明方式:
1、将Pointcut单独声明在一个类文件中。
Pointcut的声明形式如下:
@Pointcut("execution(* com.YH.类型名.*(..))")//pointcut的定义
public void point(){}//pointcut的签名
如果pointcut很多时,可以将若干个上面的pointcut单独的放在一个特定的类文件中。当调用的时候,在Advice所在类文件中作如下声明:
@Before("pointcut类完整名.签名()")//BeforeAdvice
@AfterReturing(pointcut="pointcut类完整名.签名()",returning="retVal")
@AfterThrowing(pointcut="pointcut类完整名.签名()",throwing="throwable")
@Around("pointcut类完整名.签名()")
2、在Advice所在类中声明Pointcut。
如果一个Pointcut需要被多个Advice引用,那么可以在Advice类文件中提前声明一个特定的Pointcut如:
@Pointcut("execution(* com.YH.类型名.*(..))")//pointcut的定义
public void point(){}//pointcut的签名
然后再在每个Advice声明中直接引用其签名即可。
3、每个Advice都直接引用Pointcut的描述;如
@Before("execution(* com.YH.类型名.*(..))")//BeforeAdvice
实时证明,第一种与第二种方法,总会报错,可能是JDK版本与AspectJ版本不一致所致。为了保持较高可移植性,尽量用第三种方法。