Spring 提供了四种AOP支撑:
基于代理的经典spring aop;
纯POJO切面
@AspectJ注解驱动的切面
注入式AspectJ切面
前三种都是Spring AOP的变体。
下图是一个切点表达式,代表perform方法执行时触发通知的调用
进入主题,spring实战学习,如何切面,粗读了一遍,敲了一些代码,比较容易理解,但是没测试看不到结果感觉很虚,这一章暂时放着,闷头跟着书实现一个web应用程序,再回头阅读效果可能更好。
package concert;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class Audience {
@Pointcut("execution(** concert.Performance.perform(..))")
public void performance() {}
@Before("performance()")
public void silenceCellPhones(){
System.out.println("Silenceing cell phones");
}
@Before("performance()")
public void takeSeats(){
System.out.println("take a seats");
}
@AfterReturning("performance()")
public void applause(){
System.out.println("拍手 clap");
}
@AfterThrowing("performance()")
public void demandRefund(){
System.out.println("demanding a refund");
}
}