1、什么是AOP
把遍布应用各处的功能分离出来形成可重用的组件。Eg: 事务、日志、安全。
2、aop术语
切面(aspect):切点与通知的结合。
切点(pointcut):定义了切面何处执行。
连接点(joinpoint):能够插入切面的一个点,为应用添加新行为。一个切点包含多个连接点。
通知(advice):定义了切面是什么以及何时使用。5种类型的通知:before、after、after-returning、after-throwing、around。
织入(weaving):spring aop是运行期织入。把通知绑定到目标对象连接点上的过程称为织入。
3、AOP的2种实现方式
xml: <aop:config></aop:config>
注解:
@Aspect
@Component
public class Audience {
@Pointcut("execution(* service.Performance.perform(int)) && args(num)")
public void performance(int num) {};
@Before("performance()")
public void takeSeats() {
System.out.println("take seats");
}
@After("performance()")
public void applause() {
System.out.println("ha ha ha ha");
}
@AfterThrowing("performance()")
public void demandRefund() {
System.out.println("demand refund");
}
@Around("performance()")
public void watchPerform(ProceedingJoinPoint jp) {
try {
System.out.println("silence cell phones");
System.out.println("take seats");
jp.proceed();
System.out.println("ha ha ha ha");
} catch (Throwable e) {
System.out.println("demand refund");
}
}
private int count = 0;
@Before("performance(num)")
public void silenceCellPhones(int num) {
System.out.println("silence cell phones");
System.out.println("num = " + num + " count = " + (++count));
}
}
网友评论